Я пишу веб-интерфейс, чтобы делать статистику по большому набору данных. Виджеты позволят пользователю выбирать переменные и группы. Каждая переменная связана с какой-то статистикой, которая может быть выполнена. Веб-страница вызывает сценарий 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)
это работает отлично, если = Деловые отношения «означают», но если = «Деловые отношения суммы ", Который не принимает na.rm в качестве аргумента, он не работает. Итак, я попытался следующий:
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))
, который не работает и выдает ошибку follwoing:
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)
ДЕЛАЕТ работу для Деловых отношений = «суммы».
Использование условного назначения строк и вставки (var) для каждого из na.rm и na.action = na.pass не работает, так как нет возможности обрабатывать запятые, необходимые для агрегирования, для анализа аргументов. Я попытался передать различные комбинации аргументов в paste(), но агрегат хочет видеть отдельные аргументы. Так может ли кто-нибудь указать мне на метод, который может работать лучше? спасибо.
Функция 'sum()' также принимает этот аргумент 'na.rm = T/F' bdw –