Answers:
您不是在多行代码上打乱代码,而是在一个标识符上打断代码。它们是有区别的。
对于您的问题,请尝试
R> setwd(paste("~/a/very/long/path/here",
"/and/then/some/more",
"/and/then/some/more",
"/and/then/some/more", sep=""))
这也说明跨多行破坏代码是非常好的。
paste0
年前我写答案时还不存在。
ah,评论太少了。无论如何,@ Dirk是非常正确的。
不需要告诉R代码从下一行开始。它比Python更聪明;-),并且只要认为该语句为“未完成”,就会继续读取下一行。实际上,在您的情况下,它也转到了下一行,但是当R放在“”之间时,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()
德克建议。
paste("~one",\n"/two")
只需要("~one" \n "/two")
。删除逗号和paste
。不看语言打击。我使用这两种语言,但是粘贴总是令人讨厌。
leaving a bracket open, or ending the line with an operator
这两个是要走的路。
Dirk的上述方法绝对可以使用,但是如果您要寻找一种方法来引入长字符串,其中空格/结构对于保留很重要(例如:使用RODBC的SQL查询),则有两步解决方案。
1)跨多行输入文本字符串
long_string <- "this
is
a
long
string
with
whitespace"
2)R将引入一堆\n
字符。strwrap()
根据文档,用去除这些字符,这会破坏空格:
strwrap(long_string, width=10000, simplify=TRUE)
通过告诉strwrap将文本包装到非常长的行中,您将获得一个没有空格/换行符的单个字符向量。
strwrap
即使源字符串不超过10k个字符,也可能返回多个字符串的向量。尝试strwrap("a\n\nb")
。它将返回长度为3的向量,您需要paste(strwrap("a\n\nb"), collapse=" ")
使用空格字符胶将其粘贴回去以折叠向量。
我知道这篇文章很旧,但是我遇到了这样的情况,只想分享我的解决方案。以上所有答案都可以正常工作。但是,如果您有诸如data.table链接语法中的代码,这将变得有些挑战。例如我有一个问题。
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]
我尝试了上面的大多数建议,但都没有用。但我发现它们之间可以用逗号分隔[]
。在分割][
不起作用。
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]