Dividir código en varias líneas en un script R
Quiero dividir una línea en un script R sobre varias líneas (porque es demasiado larga). ¿Cómo hago 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 múltiples líneas? He intentado
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
Con la tecla return
al final de la primera línea; pero eso no funciona.
Gracias.
5 answers
No estás dividiendo código en múltiples líneas, sino un único identificador. Hay una diferencia.
Para su problema, intente
R> setwd(paste("~/a/very/long/path/here",
"/and/then/some/more",
"/and/then/some/more",
"/and/then/some/more", sep=""))
Que también ilustra que está perfectamente bien romper código a través de múltiples líneas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-13 13:26:00
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 siempre que considere la instrucción como "no terminada". En realidad, en su caso también fue a la siguiente línea, pero R toma el retorno como un carácter cuando se coloca entre "".
Tenga en cuenta que tendrá que asegurarse de que su código no esté terminado. Comparar
a <- 1 + 2
+ 3
Con
a <- 1 + 2 +
3
Por lo tanto, cuando se extiende el código sobre varias líneas, usted tiene que asegurarse de que R sabe que algo está viniendo, ya sea por:
- dejando un paréntesis abierto, o
- terminando la línea con un operador
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 carácter, incluyendo la nueva línea, será visto como parte de la cadena:
x <- "This is a very
long string over two lines."
x
## [1] "This is a very\nlong string over two lines."
cat(x)
## This is a very
## long string over two lines.
Eso es la razón por la que en este caso, su código no funcionó: una ruta no puede contener un carácter de nueva línea (\n
). Así que es también por eso que es mejor utilizar la solución con paste()
o paste0()
Dirk propuesto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-19 03:13:07
El método de Dirk anterior funcionará absolutamente, pero si está buscando una manera de traer una cadena larga donde es importante preservar los espacios en blanco/estructura (ejemplo: una consulta SQL usando RODBC), hay una solución de dos pasos.
1) Introduzca la cadena de texto a través de varias líneas
long_string <- "this
is
a
long
string
with
whitespace"
2) R introducirá un montón de caracteres \n
. Despojarlos con strwrap()
, que destruye los espacios en blanco, según la documentación :
strwrap(long_string, width=10000, simplify=TRUE)
Diciéndole a strwrap que envuelva su texto a una fila muy, muy larga, se obtiene un vector de carácter único sin espacios en blanco/caracteres de nueva línea.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-14 18:09:05
Para ese caso particular hay file.path
:
File <- file.path("~",
"a",
"very",
"long",
"path",
"here",
"that",
"goes",
"beyond",
"80",
"characters",
"and",
"then",
"some",
"more")
setwd(File)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-08 21:06:43
En el mac puedes pulsar:
⎇ and return
Esto le permitirá introducir un comando sobre varias líneas y R no debería preocuparse.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-12 16:06:33