我原本以为分号;相当于添加一个明确的新行,例如
x <- 1; y <- 2
Run Code Online (Sandbox Code Playgroud)
是相同的
x <- 1
x <- 2
Run Code Online (Sandbox Code Playgroud)
当然,R文档似乎没有区别于语法上完整的语句:
分号和新行都可用于分隔语句.分号始终表示语句的结尾,而新行可以表示语句的结束.如果当前语句在语法上不完整,则评估者将忽略新行.
但是,我发现至少在Rstudio服务器中,分号的行为与新行不同.例如:
> temp_a ; temp_b <- 1 ; temp_c <- 2
Error: object 'temp_a' not found
> exists("temp_b")
[1] FALSE
> exists("temp_c")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
相比
> temp_a
Error: object 'temp_a' not found
> temp_b <- 1
> temp_c <- 2
>
> exists("temp_b")
[1] TRUE
> exists("temp_c")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
为什么会这样?还有其他问题我应该留意吗?
Jth*_*rpe 30
在控制台上,只要一行以完整语句结束,就会评估脚本.因此,这:
temp_a
temp_b <- 1
temp_c <- 2
Run Code Online (Sandbox Code Playgroud)
称之为:
source(textConnection('temp_a'))
source(textConnection('temp_b <- 1'))
source(textConnection('temp_c <- 2'))
Run Code Online (Sandbox Code Playgroud)
其中每一行在遇到时都会被评估,前一行中的失败不会阻止后续行的计算.另一方面.这个:
temp_a ; temp_b <- 1 ; temp_c <- 2
Run Code Online (Sandbox Code Playgroud)
相当于调用这个:
source(textConnection('temp_a ; temp_b <- 1 ; temp_c <- 2'))
Run Code Online (Sandbox Code Playgroud)
这是相当于本
source(textConnection('
temp_a
temp_b <- 1
temp_c <- 2'))
Run Code Online (Sandbox Code Playgroud)
因为当第一行失败时,代码的其余部分不会运行.
顺便提一下,如果你想在控制台上模仿这种行为,你可以利用这样一个事实:直到它们完成一个完整的语句才会评估这些行,通过用括号括起三行来制作一个被评估为的单个代码块.整体,像这样:
{
temp_a
temp_b <- 1
temp_c <- 2
}
Run Code Online (Sandbox Code Playgroud)