Разделить код на несколько строк в сценарии 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 не должен заботиться.