我理解编写"if - else if"语句的常用方法如下:
if (2==1) {
print("1")
} else if (2==2) {
print("2")
} else {
print("3")
}
Run Code Online (Sandbox Code Playgroud)
要么
if (2==1) {print("1")
} else if (2==2) {print("2")
} else print("3")
Run Code Online (Sandbox Code Playgroud)
相反,如果我这样写
if (2==1) {
print("1")
}
else if (2==2) {
print("2")
}
else (print("3"))
Run Code Online (Sandbox Code Playgroud)
或者这样:
if (2==1) print("1")
else if (2==2) print("2")
else print("3")
Run Code Online (Sandbox Code Playgroud)
声明不起作用.你能解释一下为什么}必须先行else或else if同一行吗?是否还有其他方法在R中编写if-else if-else语句,尤其是没有括号?
当我查看R函数时,我经常会发现以下结构:
f <- function(exp=T) {
if (exp)
a <- 1
else
a <- 2
}
f()
f(F)
Run Code Online (Sandbox Code Playgroud)
这将运行没有错误.但是执行内部函数代码会引发错误,因为R可能假定语句在第一次赋值后完成,a <- 1并且无法处理以下其他内容.
exp=T
if (exp)
a <- 1
else
a <- 2
Run Code Online (Sandbox Code Playgroud)
现在,这对我来说很有意义,但我仍然想了解为什么执行代码的行为在函数内部或外部执行时会有所不同.
我现在很迷茫!首先我了解到在 R 中这是不可能的,但我经常忘记它并且它有时有效。然后它又不起作用了!我开始认识到这种模式——它在 for 循环或另一个块语句中工作,但不在外部:
for (i in 1:10) {
if (0)
a <- 1
else
a <- 2
b <- 3
}
Run Code Online (Sandbox Code Playgroud)
对我来说没有意义……有什么解释吗?和手册参考?在我阅读的每个 R 资源中,似乎都需要括号:
if (0) {
a <- 1
} else {
a <- 2
}
Run Code Online (Sandbox Code Playgroud)
PS:不是重复的,标记的问题甚至不谈论没有括号的变体,这是我问题的核心。它正在谈论换行的必要性。
以下两个是等价的,即它们是否定义了相同的功能?
function(df) {lm(mpg ~ wt, data=df)}
Run Code Online (Sandbox Code Playgroud)
和
function(df) lm(mpg ~ wt, data=df)
Run Code Online (Sandbox Code Playgroud)
特别是,我很困惑为什么可以在R中编写没有花括号的函数.
当函数定义扩展到多行时,是否只需要大括号来定义函数?
(也许关于R和Python技术上如何支持来自C的分号,但是使用它们被认为是不好的做法?)
这似乎可以解释为什么人们在定义匿名函数时通常不使用大括号,因为匿名函数通常很短,因此可以放在一行上,因此不需要大括号.
但是可以传递定义超过一行的匿名函数(显然这可能是不好的做法,但这不是我的观点)?
如果有可能,那是否需要大括号?
我有一个简单的 R 代码,它返回错误:“else”中的意外“else”:
if(1==1)
{
x = 1
}
else
{
x = 2
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这怎么可能吗?
它与“else”错误中的问题Unexpected 'else' 不同,因为问题似乎是由嵌套的 else 引起的,而此处是未嵌套的。