我想将拆分到多个行的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