gpt4 book ai didi

r - 将变量和名称传递给 data.table 函数

转载 作者:行者123 更新时间:2023-12-01 23:54:58 25 4
gpt4 key购买 nike

我有一个报告,需要申请不同名称的data.tables [包括j 和by]。
我通过将参数包装在 eval(substitute(value)) 中来完成它的唯一方法功能。这会降低代码的可读性。
我已将 j 参数命名为“变量”,但我想将函数的 j 参数传递给 setnames职能。

所以,问题是:

有没有办法避免eval(substitute(value)) build ?

我可以将 j 参数传递给 setnames 函数吗?

library(data.table)
library(ggplot2)
data(diamonds, package = "ggplot2")
dt = as.data.table(diamonds)

var.report = function(df, value, by.value) {
var.report = df[, list( .N,
sum(is.finite(eval(substitute(value)))), # count values
sum(is.na(eval(substitute(value)))) # count NA
), by = eval(substitute(by.value))]

setnames(var.report, c("variable", "N","n.val","n.NA"))

return(var.report)
}


var.report(dt, depth, clarity)

最佳答案

怎么样eval(substitute 'ing 整个函数体(或者只是 data.table 计算,如果你想更具体):

var.report = function(df, value, by.value) {
eval(substitute({
var.report = df[, list( .N,
sum(is.finite(value)), # count values
sum(is.na(value)) # count NA
), by = by.value]

setnames(var.report, c("variable", "N","n.val","n.NA"))

return(var.report)
}))
}

var.report(dt, depth, clarity)
# variable N n.val n.NA
#1: SI2 9194 9194 0
#2: SI1 13065 13065 0
#3: VS1 8171 8171 0
#4: VS2 12258 12258 0
#5: VVS2 5066 5066 0
#6: VVS1 3655 3655 0
#7: I1 741 741 0
#8: IF 1790 1790 0

我不太明白第二个问题,我通常会在原始表达式中分配名称,这有助于更好地跟踪事物,如下所示:
var.report = df[, list(N     = .N,
n.val = sum(is.finite(value)), # count values
n.NA = sum(is.na(value)) # count NA
)
, by = list(variable = by.value)]

关于r - 将变量和名称传递给 data.table 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24361146/

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