【发布时间】:2018-10-16 04:56:07
【问题描述】:
我需要一些帮助来创建一种特殊的减法。
我有一个数据表x,我必须减去两列,比如a 和b。
但是,任何一列都可能不存在。
如果一列不存在,则其减法中的值应设置为零。
到目前为止,我已经通过尝试定义一个新的减法运算符%-%来解决这个问题
因此,例如,如果x = data.table(a = 5, b = 2),那么a %-% b 应该是3,而a %-% d 应该是5。
我试图定义这个减法运算符,如下所示。然而,由于某种原因,我的减法总是产生零!谁能帮我理解我做错了什么以及如何更正我的代码?
library(data.table)
x = data.table(a = floor(10 * runif(5)), b = floor(10 * runif(5)), c =floor(10 * runif(5)))
`%-%` <- function(e1,e2, DT = x){
ifelse(is.numeric(substitute(e1, DT)), e1 <- substitute(e1, DT), e1 <- 0)
ifelse(is.numeric(substitute(e2, DT)), e2 <- substitute(e2, DT), e2 <- 0)
return(e1 - e2)
}
x[, d := a %-% b]
x
x[, d := a %-% d]
x
非常感谢!
【问题讨论】:
-
你应该研究一下 ifelse 和 if/else 之间的区别,并了解何时使用它们中的哪一个。你对 ifelse 的使用是非常错误的。
标签: r data.table binary-operators