在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不应该关心。