我有以下数据:
df = data.frame(
stat = c('mean', 'var'),
value = c(-9, 10))
假设如果“stat”是“var”,我想取“value”的平方,如果不是,则不执行任何操作。
df %>%
mutate(
value = ifelse(stat=='var', sqrt(value), value))
我收到警告:
Warning message:
In sqrt(-9) : NaNs produced
为什么我会收到警告?不应计算值 sqrt(-9) 因为“值”是“平均值”
最佳答案
根据ifelse
文档
If ‘yes’ or ‘no’ are too short, their elements are recycled.
‘yes’ will be evaluated if and only if any element of ‘test’ is
true, and analogously for ‘no’.
您已将其解释为意味着将以逐元素方式绕过"is"或“否”。
但是,似乎这不是文档的意思。这意味着,除非测试中的所有元素都为 true 或 false,否则将进行评估。
这意味着,只要您的测试至少有一个 true 和至少一个 false,那么将为测试中的每个元素预先计算 yes 和 no,并且只有在评估该元素之后,才会给出适当的响应已选择。
关于r - R 中 ifelse() 的奇怪行为 : when are the values evaluated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61913639/