【发布时间】:2016-08-17 23:57:06
【问题描述】:
我想在函数中将输入传递给 setorder。理想情况下,我希望该函数在数据表中获取数据表名称和变量名称,根据变量重新排序表,然后做一些其他事情。
这是一个我想做但不起作用的例子。
dt <- data.table(replicate(10,sample(0:100,1000,rep=TRUE)))
sortFunction <- function(dt,var) {
v2 <- deparse(substitute(var))
data.table::setorder(dt,v2)
return(dt)
}
sortFunction(dt, var = "V1")
理想情况下,我想让函数识别字符变量dt 是全局环境中的数据表;即 dt 和 var 都将作为字符变量传递,然后被识别为数据表和
【问题讨论】:
-
还有
setorderv所以你可以做setorderv(dt, "V2")并避免deparse(substitute(... -
这个建议解决了第一个问题。代码
sortFunction <- function(dt,var) { data.table::setorderv(dt,var) return(dt) } sortFunction(dt, var = "V2")符合我的要求。将 dt 的名称而不是 dt 本身传递给函数怎么样? -
我真的不推荐它,但你可以做
f <- function(dt,var) {tmp <- get(dt,envir=.GlobalEnv); setorderv(tmp,var); tmp}或类似的东西。 -
对我的问题更好的解决方案是继续将dt传递给函数,并使用deparse(substitute(dt))获取数据表的名称。但是,很高兴有您提出的“获取”方法。
-
如果您想按名称引用 data.table,我建议您将 data.tables(通常是任何其他数据类型)保留在新环境中,而不是
.GlobalEnv。此外,您可以自行回答问题或将其删除。
标签: r function data.table