R如果函数仍然执行,即使条件评估为false

时间:2017-06-22 03:20:11

标签: r if-statement

我正在使用虹膜数据集。

请输入以下代码:

functionq3 <- function(x) {
  if(x[['Sepal.Length']] > 5) {
    return("greater than 5") 
  }
  else {
    return("less than 5") 
  }
}
outputq3 <- apply(iris,1,functionq3)
print(outputq3)

它返回&#34;大于5&#34;即使该值为5.我期待&#34;小于5&#34;。出了什么问题?

1 个答案:

答案 0 :(得分:2)

applyiris数据框中的所有元素强制转换为字符。然后在您的函数中,比较运算符>x[['Sepal.Length']] > 5的RHS上的数字5强制转换为字符“5”。

所以“5.0”(在iris[['Sepal.Length']])和5中的真实比较是"5.0" > "5"。该比较取决于字符串“5.0”和“5”的编码方式。

参见“比较”

  

字符向量中字符串的比较是字典中的字典   字符串使用正在使用的语言环境的整理顺序...

     

...如果两个参数是不同类型的原子向量,则一个是   强迫对方的类型,优先顺序(递减)   是字符,复数,数字,整数,逻辑和原始。