Ber*_*end 12 if-statement r sequence
我正在尝试将数字除以两个if语句的结果之和。由于某种原因,R在完成第一个if语句后忽略两个if语句的括号,仅对第一个if语句进行除法。在第一个if语句周围加上括号时,该公式将按预期工作。问题是:为什么呢?
用ifelse(y == 2,4,1)替换if语句可以解决该问题,以及多余的括号。我很好奇为什么第一次测试会给我出乎意料的结果。
x <- 1
y <- 2
z <- 4
test1 <- z/(if(y==2){4}else{1}+if(x==1){4}else{1})
> print(test1)
[1] 1
test2 <- z/((if(y==2){4}else{1})+if(x==1){4}else{1})
> print(test2)
[1] 0.5
Run Code Online (Sandbox Code Playgroud)
我希望test1和test2的结果均为0.5
一个好问题。从R语言定义:
R中的计算由顺序评估语句组成。诸如x <-1:10或mean(y)之类的语句可以用分号或换行符分隔。
此外,在 if:
if / else语句有条件地求值两个语句。有一个条件被评估,如果该值为TRUE,则评估第一条语句;否则将评估第二条语句。if / else语句返回所选择的语句的值作为其值。正式语法是
Run Code Online (Sandbox Code Playgroud)if ( statement1 ) statement2 else statement3
您遇到的问题{1}+if(x==1){4}else{1}是有效的声明,因此R将其解释为statement3。换句话说,从else,直到语句为FALSE 时,才遇到(在块内)直到换行符或分号为止的所有内容if。
通常情况下,
if (y == 2) {
4
} else {
1
}
Run Code Online (Sandbox Code Playgroud)
我们了解到,在最后一个花括号之后,if语句已完成,但它是换行符(而不是右花括号)表示表达式的结尾。例如,这不会创建a
if (y == 2) {
4
} else {
1
} -> a
Run Code Online (Sandbox Code Playgroud)