【发布时间】:2021-12-13 23:18:16
【问题描述】:
我希望我的函数能够采用值或列名。如何使用 data.table 做到这一点?
library(data.table)
df <- data.table(a = c(1:5),
b = c(5:1),
c = c(1, 3, 5, 3, 1))
myfunc <- function(val) {
df[a >= val]
}
# This works:
myfunc(2)
# This does not work:
myfunc("c")
如果我将函数定义为:
myfunc <- function(val) {
df[a >= get(val)]
}
# This doesn't work:
myfunc(2)
# This works:
myfunc("c")
解决这个问题的最佳方法是什么?
编辑:明确地说,我希望结果与以下内容相同:
# myfunc(2)
df %>%
filter(a >= 2)
# myfunc("c")
df %>%
filter(a >= c)
编辑: 感谢大家的回复,我想我最喜欢 dww 的回答。 我希望它像在 dplyr 中一样简单,我可以做到:
myfunc <- function(val) {
df %>%
filter(a >= {{val}})
}
# Both work:
myfunc(2)
myfunc(c)
【问题讨论】:
-
只要你确定你只会使用数值或列名来调用函数,那么你可以做类似
df[a >= {if (is.numeric(val)) val else get(val)}]
标签: r data.table