执行摘要:
R 只有两种方法可以知道 else 子句属于它上面的 if 子句:
- 整个 if...else 语句(可能还有其他语句)都用大括号括起来;
- else 一词与 if 子句的结尾出现在同一行。
证据:
上面的讨论对我有帮助,但我希望我能提供一个有用的狡辩。是的,这是正确的
f <- function (exp)
if (exp)
1
else
2
由于 R 未能继续阅读超过 1 ,经典Error: unexpected 'else' in "else"
消息失败。已正确提供了两种方法来使 R 继续阅读超过 1:
f <- function (exp) {
if (exp)
1
else
2
}
和
f <- function (exp) if (exp) 1 else 2
但是还有第三种方法还没有提到——else
向上移动一条线。因此,以下内容也有效,因为 R 知道继续阅读 1:
f <- function (exp)
if (exp)
1 else
2
我认为关键是要么支撑整个函数体,要么确保它else
与 if 子句的末尾出现在同一行,以便 R 知道继续阅读。这就是单线解决方案有效的原因。这也是为什么它有效的原因:
f <- function (exp)
if (exp) {
1
} else
2
但这失败了:
f <- function (exp)
if (exp) {
1
}
else
2
并且使用更标准的函数体支撑,这也有效:
f <- function (exp) {
if (exp) {
1
}
else
2
}
但是我们是否正在构建一个函数是一个红鲱鱼。重要的只是大括号和else
. 因此,这些工作:
{
if (exp) {
1
}
else
2
}
if (exp) {
1
} else
2
但这失败了:
if (exp) {
1
}
else
2
并在顶部展示我的断言 1,这是有效的:
{
x <- 4
if (exp)
1
else
2
}