【发布时间】:2014-12-22 16:04:18
【问题描述】:
我对 ifelse 评估有疑问。
以下函数根据 3 个条件进行评估:
mk <- function(a, b, c, d, e_1, e_2, f, k)
# condition 1
ifelse (!is.na(e_1) & !(k %in% 1),
mk <- d - e_1 * c,
# condition 2
ifelse (!is.na(e_2) & !(k %in% 1),
mk <- e_2 - d * c,
# condition 3
ifelse((a - b) <= 11,
mk <- c * a - b * f,
mk <- c * f
))
)
如果我解析单个元素,则函数会正确评估,但如果我将数据帧的行作为输入值,则即使满足先前的条件,该函数也只会在最后一个条件下使用计算。包含 e_1、e_2 和 k 值的列中有一些 NA,我怀疑这就是问题所在。我不明白为什么 NA'S 强制将整个向量评估为条件 3,即使它们实际上从未在计算中使用,因为条件应该排除它们的使用。如果我用字符替换计算,即写“使用条件 1/2/3”而不是公式,则条件计算正确。
如何避免这个问题?
【问题讨论】:
-
是否有一些行满足多个条件,即'e_1`和
e_2不是NA和a-b <= 11? -
有可能,但是否相关?只有当 1 或 2 都不适用时,才应评估最后一个条件。
-
您能否发布将
data.frame提供给函数的代码?没有这些和一些数据,这很难测试。 -
原来问题是一个舍入函数,我什至没有怀疑是问题的一部分
标签: r if-statement dataframe na