在R脚本中将代码拆分为多行

时间:2011-06-13 11:44:52

标签: r multiline

我想在多个行的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键;但这不起作用。

感谢。

7 个答案:

答案 0 :(得分:130)

Bah,评论太小了。无论如何,@ 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() Dirk建议的情况下使用解决方案的原因。

答案 1 :(得分:95)

您没有在多行上打破代码,而是单个标识符。有区别。

对于您的问题,请尝试

R> setwd(paste("~/a/very/long/path/here",
               "/and/then/some/more",
               "/and/then/some/more",
               "/and/then/some/more", sep=""))

这也说明了在多行中断代码是完全正确的。

答案 2 :(得分:31)

上面的Dirk方法绝对有效,但是如果你正在寻找一种方法来引入一个长字符串,其中空格/结构很重要(例如:使用RODBC的SQL查询),有一个两步解决方案。 / p>

1)将文本字符串放在多行中

long_string <- "this
is 
a 
long
string
with
whitespace"

2)R将引入一堆\n个字符。根据{{​​3}} <{1}}消除空白的strwrap()去掉那些:

strwrap(long_string, width=10000, simplify=TRUE)

通过告诉strwrap将文本换行到一个非常非常长的行,你得到一个没有空格/换行符的单个字符向量。

答案 3 :(得分:12)

对于特定情况,有file.path

File <- file.path("~", 
  "a", 
  "very", 
  "long",
  "path",
  "here",
  "that",
  "goes",
  "beyond",
  "80",
  "characters",
  "and",
  "then",
  "some",
  "more")
setwd(File)

答案 4 :(得分:0)

我知道这篇文章很旧,但是我遇到了这样的情况,只想分享我的解决方案。以上所有答案都可以正常工作。但是,如果您有诸如data.table链接语法中的代码,这将变得有些挑战。例如我遇到了这样的问题。

next props time_ [s] 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]]][

我尝试了以上大多数建议,但这些建议均无效。但我发现它们可以在<=12000]中用逗号分隔。在[]拆分无效。

][

答案 5 :(得分:0)

刚刚发现您可以像这样使用 glue::glue 转义换行符:

glue("some\\
     thing")

something

答案 6 :(得分:-4)

在Mac上你可以点击:

⎇ and return

这将允许您输入多行的命令,R不应该关心。