Разделить код на несколько строк в сценарии R
Я хочу разделить строку в скрипте R на несколько строк (потому что она слишком длинная). Как мне это сделать?
в частности, у меня есть строка, такая как
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
можно ли разбить длинный путь на несколько строк? Я пытался!--4-->
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/
then/some/more')
С return
ключ в конце первой строки; но это не работает.
спасибо.
5 ответов
ты не ломаешься код по нескольким строкам, но скорее единый идентификатор. Есть разница.
для вашей проблемы попробуйте
R> setwd(paste("~/a/very/long/path/here",
"/and/then/some/more",
"/and/then/some/more",
"/and/then/some/more", sep=""))
что также иллюстрирует, что совершенно нормально разбивать код на несколько строк.
Ба, комментарии слишком малы. Во всяком случае, @Dirk очень прав.
R не нужно говорить, что код начинается со следующей строки. Это умнее, чем Python ; -) и будет просто продолжать читать следующую строку, когда она считает утверждение "не закончено". На самом деле, в вашем случае он также перешел к следующей строке, но R принимает возврат как символ, когда он помещен между "".
имейте в виду, вам придется убедиться, что ваш код не закончен. Сравнить
a <- 1 + 2
+ 3
С
a <- 1 + 2 +
3
таким образом, при распространении кода по нескольким строкам вы должны убедиться, что R знает, что что-то идет, либо :
- оставляя скобку открытой, или
- завершение строки оператором
когда мы говорим о струнах, это все еще работает, но вам нужно быть немного осторожным. Вы можете открыть кавычки, и R будет читать, пока вы не закроете его. Но каждый персонаж, включая новая строка, будет рассматриваться как часть строки:
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.
вот почему в этом случае, ваш код не работал: путь не может содержать символ новой строки (\n
). Так вот почему вам лучше использовать решение с paste()
или paste0()
Дирк предложил.
метод Дирка выше будет абсолютно работать, но если вы ищете способ ввести длинную строку, где важно сохранить пробелы/структуру (пример: SQL-запрос с использованием RODBC), существует двухэтапное решение.
1) вывести текст в несколько строк
long_string <- "this
is
a
long
string
with
whitespace"
2) R введет кучу \n
символы. Снимите их с strwrap()
, который уничтожает пробелы, за документация:
strwrap(long_string, width=10000, simplify=TRUE)
сообщая strwrap, чтобы обернуть текст в очень, очень длинную строку, вы получаете один символьный вектор без пробелов/символов новой строки.
для этого конкретного случая есть file.path
:
File <- file.path("~",
"a",
"very",
"long",
"path",
"here",
"that",
"goes",
"beyond",
"80",
"characters",
"and",
"then",
"some",
"more")
setwd(File)
на mac вы можете нажать:
⎇ and return
Это позволит вам ввести команду по нескольким строкам, и R не должен заботиться.