【发布时间】:2020-07-29 02:43:36
【问题描述】:
作为更大功能的一部分,我需要在 data.table 中创建两个新列(稍后用于创建绘图)。
这些是我的专栏的名称:
names(freqSevDataAge)
[1] "ag5" "claims" "exposure"
[7] "severity" "frequency"
我正在尝试使这部分功能起作用:
testDT <- function(data, xvar, yvar, yvarsec, groupvar, ...){
freqSevDataAge2 <- freqSevDataAge[!claims == 0][, ':=' (scaled = "yvarsec" * max("yvar")/max("yvarsec"),
param = max("yvar")/max("yvarsec"))]
}
testDT(freqSevDataAge, xvar = "ag5", yvar = "severity", yvarsec = "frequency", groupvar = "gender")
我得到的错误是:
“yvarsec”* max(“yvar”) 中的错误:二进制的非数字参数 运营商
编辑:
使用get() 提出的解决方案有效,但是现在我在使用 ggplot 中新创建的列时遇到了麻烦。我收到一个错误:
f(...) 中的错误:找不到对象“参数”
我通过stem检查了函数,知道param列已创建,问题是在ggplot中调用它。我怎么能
getSecPlot <- function(data, xvar, yvar, yvarsec, groupvar, ...){
if ("agegroup" %in% xvar) xvar <- get("agegroup")
data <- data[!claims == 0][, ':=' (scaled = get(yvarsec) * max(get(yvar))/max(get(yvarsec)),
param = max(get(yvar))/max(get(yvarsec)))]
param <- unique(param)
sec_plot <- ggplot(data, aes_string (x = xvar, group = groupvar)) +
geom_col(aes_string(y = yvar, fill = groupvar, alpha = 0.5), position = "dodge") +
geom_line(aes(y = scaled, color = gender)) +
scale_y_continuous(sec.axis = sec_axis(~./(param),
name = paste0("average ", yvarsec), labels = function(x) format(x, big.mark = " ", scientific = FALSE))) +
labs(y = paste0("total ", yvar)) +
theme_pubclean()
}
【问题讨论】:
-
param <- unique(param)是错误的,因为param是在data中创建的,因此您可能需要param <- unique(data$param)
标签: r function functional-programming data.table nse