分裂代码在多行中的R脚本分裂代码在多行中的R脚本(Split code over multiple

2019-05-13 09:50发布

我想将拆分到多个行的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在第一行的末尾密钥; 但是,这并不工作。

谢谢。

Answer 1:

你是不是断多行,而是一个标识符 。 它们是有区别的。

对于您的问题,请尝试

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

这也说明了它是完全没有跨多个行破坏代码。



Answer 2:

呸,评论是太小了。 无论如何,@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()德克建议。



Answer 3:

德克的方法上面绝对会工作,但如果你正在寻找一种方式来在一个长字符串带给这里的空白/结构是非常重要的保护(例如:使用RODBC一个SQL查询)有两个步骤的解决方案。

1)把在跨多个行的文本串

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

2)R将介绍一堆\n字符。 剥离与出strwrap()这破坏的空白,每文档 :

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

告诉strwrap到您的文本换到一个很长很长一排,你得到的无空白/换行字符一个字符向量。



Answer 4:

对于特定的情况下,有file.path

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


Answer 5:

作为一个新的用户RI通知,上面没有答案回答的问题! 回答询问了一段代码,并专注于数据读取的几个例子。 然而,这里是一块,我剪切和Rstudio控制台和结果粘贴代码:

> poisson.lik <- function(lambda,Trades,Trades_Freq){
+     n <- length(Trades)
+     logl <- sum(Trades*Trades_Freq)*log(lambda) - n*lambda  – 
Error: unexpected input in:
"    n <- length(Trades)
    logl <- sum(Trades*Trades_Freq)*log(lambda) - n*lambda  –"
>     sum(log(Trades_Freq))
Error: object 'Trades_Freq' not found
>     return(-logl)
Error: object 'logl' not found
> }
Error: unexpected '}' in "}"

我想在结尾处添加一个逗号 - ,我也尝试打回,并让端件上开始一个新行。 这些都不奏效。 令人难以置信的是,我不得不分手的两件行作为一个补丁中为了得到它运行图所示! 我简直无法相信这是R的问题。

> poisson.lik <- function(lambda,Trades,Trades_Freq){
+     n <- length(Trades)
+     logl1  <- sum(Trades*Trades_Freq)*log(lambda) - n*lambda 
+     logl2  <-  - sum(log(Trades_Freq)) 
+     logl <- logl1 + logl2
+     return(-logl)
+ }
> 


Answer 6:

在Mac上,你可以打:

⎇ and return

这将允许你在多行输入命令和R不应该关心。



文章来源: Split code over multiple lines in an R script
标签: r multiline