R如何将输入传递给函数中的setorder
我想在函数中将输入传递给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
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(替换(…
这个建议解决了第一个问题。codesort函数我真的不推荐它,但是你可以做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 (%)"
)