在R脚本中分割多行代码
我想在一个R脚本中分割多行(因为它太长了)。 我怎么做?
具体来说,我有一个如
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/then/some/more')
是否有可能将多条路线分开? 我试过了
setwd('~/a/very/long/path/here/that/goes/beyond/80/characters/and/ then/some/more')
在第一行末尾有return
键; 但是这不起作用。
谢谢。
您不是通过多行代码来分解代码 ,而是使用单个标识符 。 它们是有区别的。
对于你的问题,尝试
R> setwd(paste("~/a/very/long/path/here", "/and/then/some/more", "/and/then/some/more", "/and/then/some/more", sep=""))
这也说明了跨多行破解代码是完全正确的。
Bah,评论太小了。 无论如何,@Dirk是非常正确的。
R不需要被告知代码从下一行开始。 它比Python更聪明;-)只要将语句视为“未完成”,就会继续阅读下一行。 实际上,就你的情况而言,它也会到下一行,但是当R被放置在“”之间时,R把它作为一个字符。
请注意,你必须确保你的代码没有完成。 比较
a <- 1 + 2 + 3
同
a <- 1 + 2 + 3
所以,当在多行代码中传播代码时,你必须确保R知道一些事情即将到来,或者通过:
- 留下一个括号,或者
- 用操作员结束该行
当我们在说话的时候,这仍然有效,但是你需要小心。 您可以打开引号,R将继续阅读,直到您closures它。 但是包括换行符在内的每个字符都将被视为string的一部分:
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.
这就是为什么在这种情况下,您的代码无法工作:path不能包含换行符( \n
)。 所以这也是为什么你更好地使用paste()
或paste0
Dirk提出的解决scheme。
上面的Dirk方法绝对可行,但是如果你正在寻找一种方法来引入一个长空string,其中空白/结构对于保存是重要的(例如:使用RODBC的SQL查询),有两步解决scheme。
1)将文本string跨越多行
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
这将允许你input一个命令在多行,R不应该关心。