Quiero dividir una línea en un script R en varias líneas (porque es demasiado larga). ¿Cómo puedo hacer eso?
Específicamente, tengo una línea como
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
¿Es posible dividir el camino largo en varias líneas? Lo intenté
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
con return
llave al final de la primera línea; Pero eso no funciona.
Gracias.
paste0
aún no existía cuando escribí la respuesta hace más de 2 años.Bah, los comentarios son demasiado pequeños. De todos modos, @Dirk tiene mucha razón.
R no necesita que se le diga que el código comienza en la siguiente línea. Es más inteligente que Python ;-) y continuará leyendo la siguiente línea cada vez que considere la declaración como "no terminada". En realidad, en su caso también pasó a la siguiente línea, pero R toma el retorno como un carácter cuando se coloca entre "".
Eso sí, tendrás que asegurarte de que tu código no esté terminado. Comparar
con
Por lo tanto, al distribuir código en varias líneas, debe asegurarse de que R sepa que algo viene, ya sea:
Cuando hablamos de cadenas, esto todavía funciona, pero debes tener un poco de cuidado. Puede abrir las comillas y R seguirá leyendo hasta que lo cierre. Pero cada personaje, incluida la nueva línea, se verá como parte de la cadena:
Esa es la razón por la cual en este caso, su código no funcionó: una ruta no puede contener un carácter de nueva línea (
\n
). Por eso también es mejor usar la solución conpaste()
o conpaste0()
Dirk propuesto.fuente
paste("~one",\n"/two")
que solo necesitas("~one" \n "/two")
. soltar las comas y elpaste
. No busco el lenguaje smackdown. Uso ambos idiomas pero siempre pensé que pegar era una molestia.("one"\n "/one.one" # some comment\n "/two")'
ejemplos en stackoverflow.com/questions/10660435/…leaving a bracket open, or ending the line with an operator
estos dos son el camino a seguir.El método de Dirk anterior funcionará absolutamente, pero si está buscando una manera de incorporar una cadena larga donde sea importante preservar el espacio en blanco / estructura (ejemplo: una consulta SQL usando RODBC) hay una solución de dos pasos.
1) Traiga la cadena de texto en varias líneas
2) R presentará un montón de
\n
personajes. Elimine esosstrwrap()
, que destruyen los espacios en blanco, según la documentación :Si le dice a strwrap que ajuste su texto en una fila muy, muy larga, obtendrá un vector de un solo carácter sin espacios en blanco / caracteres de nueva línea.
fuente
strwrap
podría devolver el vector de varias cadenas incluso si la cadena de origen no supera los 10k caracteres. Tratarstrwrap("a\n\nb")
. Devolverá el vector de longitud 3 y debe pegarlo nuevamentepaste(strwrap("a\n\nb"), collapse=" ")
usando un pegamento de caracteres espaciales para contraer el vector.Para ese caso particular hay
file.path
:fuente
Sé que esta publicación es antigua, pero tuve una situación como esta y solo quiero compartir mi solución. Todas las respuestas anteriores funcionan bien. Pero si tiene un Código como el de la sintaxis de encadenamiento de data.table, se convierte en un gran desafío. Por ejemplo, tuve un 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]]][
veces]<=12000]
Intenté la mayoría de las sugerencias anteriores y no funcionaron. pero descubrí que se pueden dividir después de la coma interna
[]
. Dividir en][
no funciona.fuente