Eu quero dividir uma linha em um script R em várias linhas (porque é muito longo). Como faço isso?
Especificamente, eu tenho uma linha como
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
É possível dividir o caminho longo em várias linhas? eu tentei
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
com a return
chave no final da primeira linha; mas isso não funciona.
Obrigado.
paste0
ainda não existia quando escrevi a resposta há mais de 2 anos.Bah, os comentários são muito pequenos. De qualquer forma, o @Dirk está muito certo.
R não precisa ser informado de que o código começa na próxima linha. É mais inteligente que o Python ;-) e continuará a ler a próxima linha sempre que considerar a declaração como "não concluída". Na verdade, no seu caso, ele também foi para a próxima linha, mas R assume o retorno como um personagem quando é colocado entre "".
Lembre-se, você precisará garantir que seu código não esteja finalizado. Comparar
com
Portanto, ao espalhar o código por várias linhas, você deve certificar-se de que R saiba que algo está por vir:
Quando estamos falando de strings, isso ainda funciona, mas você precisa ter um pouco de cuidado. Você pode abrir as aspas e R continuará lendo até fechá-lo. Mas todos os caracteres, incluindo a nova linha, serão vistos como parte da string:
Essa é a razão pela qual, neste caso, seu código não funcionou: um caminho não pode conter um caractere de nova linha (
\n
). É também por isso que é melhor usar a soluçãopaste()
oupaste0()
Dirk proposto.fonte
paste("~one",\n"/two")
você apenas precisar("~one" \n "/two")
. solte as vírgulas e opaste
. Não estou olhando a linguagem smackdown. Eu uso os dois idiomas, mas sempre o colar foi um incômodo.("one"\n "/one.one" # some comment\n "/two")'
exemplos em stackoverflow.com/questions/10660435/…leaving a bracket open, or ending the line with an operator
esses dois são o caminho a percorrer.O método de Dirk acima funcionará absolutamente, mas se você estiver procurando uma maneira de inserir uma cadeia longa em que é importante preservar espaço em branco / estrutura (exemplo: uma consulta SQL usando RODBC), há uma solução em duas etapas.
1) Coloque a sequência de texto em várias linhas
2) R apresentará vários
\n
caracteres. Retire aquelesstrwrap()
que destroem espaços em branco, de acordo com a documentação :Ao dizer ao strwrap para agrupar seu texto em uma linha muito, muito longa, você obtém um vetor de caractere único, sem caracteres de espaço em branco / nova linha.
fonte
strwrap
pode retornar o vetor de várias seqüências de caracteres, mesmo que a sequência de origem não exceda 10k caracteres. Tentestrwrap("a\n\nb")
. Ele retornará um vetor de comprimento 3 e você precisará colá-lo novamentepaste(strwrap("a\n\nb"), collapse=" ")
usando uma cola de caractere de espaço para recolher o vetor.Para esse caso específico, existe
file.path
:fonte
Sei que este post é antigo, mas eu tinha uma situação como essa e só quero compartilhar minha solução. Todas as respostas acima funcionam bem. Mas se você possui um código como o da sintaxe de encadeamento data.table, torna-se um desafio. por exemplo, eu tive um problema como este.
mass <- files[, Veg:=tstrsplit(files$file, "/")[1:4][[1]]][, Rain:=tstrsplit(files$file, "/")[1:4][[2]]][, Roughness:=tstrsplit(files$file, "/")[1:4][[3]]][, Geom:=tstrsplit(files$file, "/")[1:4][[4]]][
time_ [s]<=12000]
Tentei a maioria das sugestões acima e elas não funcionaram. mas descobri que eles podem ser divididos após a vírgula dentro
[]
. Dividir][
não funciona.fonte