gpt4 book ai didi

r - 在函数中按名称传递 data.table 列

转载 作者:行者123 更新时间:2023-12-03 01:18:32 25 4
gpt4 key购买 nike

我想将列名传递给函数并使用列索引和 setorder 函数:

require(data.table)
data(iris)

top3 = function(t, n) {
setorder(t, n, order=-1)
return ( t[1:3, .(Species, n)])
}

DT = data.table(iris)
top3(DT, Petal.Width)

但是,这会返回错误:

setorderv(x, cols, order, na.last) 中的错误:
有些列不在 data.table 中:n,1

我认为我误解了 R 中传递裸列名称的工作原理。我有什么选择?

最佳答案

你可以做到

top3 = function(DT, nm) eval(substitute( DT[order(-nm), .(Species, nm)][, head(.SD, 3L)] ))
top3(DT, Petal.Width)

Species Petal.Width
1: virginica 2.5
2: virginica 2.5
3: virginica 2.5

我建议不要在函数内使用 (1) setorder,因为它有副作用; (2) 当您将来可能在少于三行的 data.table 上使用此索引时,使用 1:3 进行索引,会产生奇怪的效果; (3) 修复 3 而不是将其作为函数的参数; (4) 使用 n 作为名称...只是我个人偏好保留 n 作为计数。

关于r - 在函数中按名称传递 data.table 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36872256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com