R 使用变量替换和粘贴()将参数分配给聚合

R 使用变量替换和粘贴()将参数分配给聚合,r,conditional,aggregate,paste,R,Conditional,Aggregate,Paste,我正在编写一个web界面来对一个大数据集进行统计。小部件将允许用户选择变量和组。每个变量都与一种可以执行的统计数据相关联。该网页调用一个R脚本,该脚本设置适当的数据帧以传递到“聚合”,然后传递到各种输出。这里的数据不相关,所以我没有包括在内 我的问题是对“聚合”的灵活输入,由于我无法理解的原因,它正在爆炸: group variable “grp” str(grp) 'data.frame': 1573 obs. of 1 variable: $ Loc: Factor w/ 4 lev

我正在编写一个web界面来对一个大数据集进行统计。小部件将允许用户选择变量和组。每个变量都与一种可以执行的统计数据相关联。该网页调用一个R脚本,该脚本设置适当的数据帧以传递到“聚合”,然后传递到各种输出。这里的数据不相关,所以我没有包括在内

我的问题是对“聚合”的灵活输入,由于我无法理解的原因,它正在爆炸:

group variable “grp”
str(grp)
'data.frame':   1573 obs. of  1 variable:
 $ Loc: Factor w/ 4 levels "ED","ICU","Trans",..: 1 1 1 1 1 1 1 1 1 4 ...

Time variable
TimeBase <- “year”

data
str(tmp)
'data.frame':   554 obs. of  4 variables:
$ Loc     : Factor w/ 4 levels "ED","ICU","Trans",..: 4 1 1 1 4 4 1 1 4 4 ...
$ year    : Factor w/ 7 levels "2011","2012",..: 1 1 1 1 1 1 1 1 1 1 ...
$ ActivLag: num  3 -2 0 1 17 210 19 -7 0 107 ...
$ ScanLag : num  80 12 5 8 159 255 28 109 11 111 ...

aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, paste0(stvar), na.rm = TRUE, na.action = na.pass)
对stvar=“sum”有效


对na.rm和na.action=na.pass中的每一个使用条件字符串赋值和粘贴(var)都不起作用,因为无法处理聚合解析参数所需的逗号。我已尝试在paste()中传递各种参数组合,但aggregate希望看到单个参数。那么,有谁能给我指出一种可能更有效的方法吗?thx.

虽然可以使用字符串动态生成公式,但函数中的参数分配不能从字符串中生成,例如
aggregate()
中的可选参数、
na.rm
na.action
,其默认值为
NULL

考虑根据stvar有条件地分配两个不同的
aggregate()
调用:


虽然可以使用字符串动态生成公式,但函数中的参数分配不能从字符串中生成,例如
aggregate()
中的可选参数、
na.rm
na.action
,其默认值为
NULL

考虑根据stvar有条件地分配两个不同的
aggregate()
调用:


谢谢你的建议!问题已经解决,但要考虑到每个问题的完整性:

1) “aggregate”不会将sum()作为参数,只有“sum”和na.rm从“aggregate”传递,而不是通过sum()传递,如果sum和na.rm同时传递,则会给出一个错误


2) if then st_narm感谢您的建议!问题已经解决,但要考虑到每个问题的完整性:

1) “aggregate”不会将sum()作为参数,只有“sum”和na.rm从“aggregate”传递,而不是通过sum()传递,如果sum和na.rm同时传递,则会给出一个错误


2) if-then st\n函数
sum()
也接受此
na.rm=T/F
参数bdw函数
sum()
也接受此
na.rm=T/F
参数bdwGreat。我在样本数据上测试了这两种解决方案,并且都有效。在您得到的错误中,它必须是特定于数据的。这是fct的总和。导致该错误的原因:总和、中位数、分位数等。?可能尝试FALSE而不是NULL。另外,这些不是字符串,而是
aggregate()
methodcalls.Great。我在样本数据上测试了这两种解决方案,并且都有效。在您得到的错误中,它必须是特定于数据的。这是fct的总和。导致该错误的原因:总和、中位数、分位数等。?可能尝试FALSE而不是NULL。此外,这些不是字符串,而是
aggregate()
方法调用。
statstrg <- ifelse(stvar %in% c("sum", "prop","frel", "median"), " na.action    = na.pass", " na.rm = TRUE, na.action = na.pass")
aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp,  paste0(stvar), paste0(statstrg)) 
Error in if (na.rm) x <- x[!is.na(x)] else if (any(is.na(x)))  return(x[FALSE][NA]) : 
argument is not interpretable as logical
aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, paste0(stvar), na.action = na.pass) 
if (stvar %in% c("sum", "prop", "frel", "median")) {
    aggdf <- aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, 
                       FUN = stvar, na.action = na.pass)
} else {
    aggdf <- aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, 
                       FUN = stvar, na.rm = TRUE, na.action = na.pass)
}
if(stvar %in% c("sum", "prop","frel", "median")){
  st_narm <- NULL
} else {
  st_narm <- TRUE
}

aggdf <- aggregate(formula(paste0(". ~", names(grp), " + ", TimeBase)), data = tmp, 
                   FUN = stvar, na.rm = st_narm, na.action = na.pass)