gpt4 book ai didi

r - 为什么 if 和 else 语句不能在 R 中的不同行上

转载 作者:行者123 更新时间:2023-12-05 02:32:57 25 4
gpt4 key购买 nike

为什么在 R 中使用 if else 语句时,“else”不能换行,除非整个语句嵌套在另一种形式的语句、循环或函数中?

例如,下面的代码不起作用:

x <- 5

if(x<10){
print("x<10")
}
else{
print("x>9")
}

但是,如果我们将整个事情放在一个循环中,使其缩进,突然间它就可以正常工作了

for(i in 1:1){
x <- 5

if(x<10){
print("x<10")
}
else{
print("x>9")
}
}

我知道 R 希望你像下面这样写它们:

x <- 5

if(x<10){
print("x<10")
}else{
print("x>9")
}

但我不喜欢它的外观,并且还想了解为什么仅当语句未嵌套在其他内容中时才需要这种语法/样式。

谢谢!

最佳答案

这与强制执行样式无关,而是与 R 解析器的工作方式有关。本质上,当你的 if子句在句法上是完整的,右括号末尾有换行符,控制台认为您已完成该指令,并等待其下一条指令。但是 else子句必须是相同指令的一部分。如果 next 指令以 else 开头, R 解析器不知道 else 是什么是指。

为了清楚起见,让我们演示一下。如果将以下代码粘贴到控制台中:

x <- 5

if(x<10){
print("x<10")
}

然后你会看到这个:

> x <- 5
>
> if(x<10){
+ print("x<10")
+ }
[1] "x<10"
>

请注意,如果一行代码在句法上是完整的,R 将运行该代码,然后打印控制台标记 >在下一行的开头。如果粘贴的代码中存在换行符,但代码在语法上不完整,则控制台会放置一个 +。在每一行的开头,表明 R 解析器需要更多输入才能运行语法上完整的代码。

但是如果你运行你的示例代码,看看会发生什么:

> if(x<10){
+ print("x<10")
+ }
[1] "x<10"
> else{
Error: unexpected 'else' in "else"
> print("x>9")
[1] "x>9"
> }
Error: unexpected '}' in "}"

你的 if带有相关方括号的语句是语法上完整的元素,因此 R 运行了代码。它打印出 [1] "x<10"正如预期的那样,然后等待它的下一条指令。然而,它的下一条指令是 else { ,并且 R 解析器知道没有语法正确的 R 代码可以开始 else。 R 无法回到过去并撤消它在 if 中所做的事情。子句只是因为你随后写了一个else条款。

因此,这与强制执行样式无关。你只需要在 if 之后对 R 说“我还没有完成”条款。有多种方法可以做到这一点。例如,您的代码可以放在函数、循环或括号内。这些只是对 R 解析器说的方式:“不要运行代码,我还没有完成。”

x <- 5

{

if(x<10){
print("x<10")
}
else{
print("x>9")
}

}
#> [1] "x<10"

reprex package 创建于 2022-02-11 (v2.0.1)

关于r - 为什么 if 和 else 语句不能在 R 中的不同行上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71082458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com