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

时间:2016-08-17 23:57:07

标签: 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::setorder(dt,v2)
     return(dt)
}

sortFunction(dt, var = "V1")

理想情况下,我希望函数能够识别出字符变量dt是全局环境中的数据表;即dtvar都将作为字符变量传递,然后被识别为数据表和

1 个答案:

答案 0 :(得分:2)

这是我最终做的事情。

  • 继续传递数据表而不是尝试通过它访问它 得到(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)}
    ]
}

var和region_code.IMPACT159中包含的字符串都是dt中的列。 var列是数字,region_code.IMPACT159是字符。

deltaPlot(dt = dt.budgetShare.wide,
          var = "delta.SSP1", title = "Delta SSP1",
          ylabel = "Change in IMPACT commodity\nshare of per capita GDP (%)"
)

输出。 Plot generated by function above