R如何将输入传递给函数中的setorder

R如何将输入传递给函数中的setorder,r,function,data.table,R,Function,Data.table,我想在函数中将输入传递给setorder。理想情况下,我希望函数在数据表中取一个数据表名和一个变量名,根据变量对表重新排序,然后执行其他操作 下面是一个我想做但不起作用的例子 dt <- data.table(replicate(10,sample(0:100,1000,rep=TRUE))) sortFunction <- function(dt,var) { v2 <- deparse(substitute(var)) data.table::setor

我想在函数中将输入传递给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以下是我最后做的事情

  • 继续传入数据表,而不是尝试通过 get(dt,envir=.GlobalEnv

  • 将setorderv与数据表和 列,因为setorderv希望列名称/列名为 字符变量

  • 虽然这不是问题,但我想做的是 函数中的图形。我知道如何在函数的j字段中放置一系列图 数据表

这是目前完整的函数。我发布它时没有完整的解释,因为在我发布这个问题之前,有这个代码片段对我很有用

deltaPlot <- function(dt, var, title, ylabel, regions) {
  if (missing(regions)) {regions <- 156}
  dt.temp <- data.table::copy(dt)
  data.table::setorderv(dt.temp, var)
  junk <- dt.temp[,{
    plot(x = get(var), type = "s", main = title,
                 ylab = ylabel,
                 xlab = "",
                 xaxt = "n",
                 cex.lab = 0.8, mgp = c(2.5, 1, 0),
                 yaxs = "r")
    abline(h = 0)
    axis(1, at = 1:regions, labels = region_code.IMPACT159, cex.axis = 0.5)}
    ]
}
和输出。

还有
setorderv
,因此您可以执行
setorderv(dt,“V2”)
并避免
deparse(替换(…
这个建议解决了第一个问题。code
sort函数我真的不推荐它,但是你可以做
f我的问题的更好的解决方案是继续将dt传递到函数中,并使用deparse(替换(dt))获取数据表的名称。但是,很高兴您提出了“获取”方法。如果您想按名称引用data.table,我建议您将data.tables(通常是任何其他数据类型)保留在新环境中,而不是
.GlobalEnv
。此外,您可以自行回答问题或删除它。
deltaPlot(dt = dt.budgetShare.wide,
          var = "delta.SSP1", title = "Delta SSP1",
          ylabel = "Change in IMPACT commodity\nshare of per capita GDP (%)"
)