我正在使用虹膜数据集。
请输入以下代码:
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;。出了什么问题?
答案 0 :(得分:2)
apply
将iris
数据框中的所有元素强制转换为字符。然后在您的函数中,比较运算符>
将x[['Sepal.Length']] > 5
的RHS上的数字5强制转换为字符“5”。
所以“5.0”(在iris[['Sepal.Length']]
)和5中的真实比较是"5.0" > "5"
。该比较取决于字符串“5.0”和“5”的编码方式。
参见“比较”
字符向量中字符串的比较是字典中的字典 字符串使用正在使用的语言环境的整理顺序...
...如果两个参数是不同类型的原子向量,则一个是 强迫对方的类型,优先顺序(递减) 是字符,复数,数字,整数,逻辑和原始。