Я пытаюсь создать функцию, которая будет вычислять среднее значение столбца в подмножественном кадре данных.Хитрость заключается в том, что я всегда хочу иметь пару условий поднабора, а затем иметь возможность передать дополнительные условия функциям для дальнейшего поднабора кадра данных.
Предположим, мои данные выглядят так:1004 *
Я хочу иметь возможность выполнять подмножество, показанное ниже, используя первое условие во всех вызовах функций, а второе - что-то, что может меняться при каждом вызове функции.Кроме того, второе условие поднабора может относиться к другим переменным (я использую одну переменную var2
для экономии, но условие может включать несколько переменных).
subset(dat, var1 %in% c('a', 'b', 'c') & var2 %in% c('a', 'b'))
var1 var2 var3
1 a a 0.7506109
2 b a 0.7763748
3 c a 0.6014976
27 a b 0.7322357
28 b b 0.4593551
29 c b 0.2951004
Мой пример функции и функциивызов будет выглядеть примерно так:
getMean <- function(expr) {
return(with(subset(dat, var1 %in% c('a', 'b', 'c') eval(expr)), mean(var3)))
}
getMean(expression(& var2 %in% c('a', 'b')))
Альтернативный вызов может выглядеть следующим образом:
getMean(expression(& var4 < 6 & var5 > 10))
Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: С помощью Войцеха Собалы я придумал следующую функцию, которая дает мне возможность проходить в 0 или более условиях.
getMean <- function(expr = NULL) {
sub <- if(is.null(expr)) { expression(var1 %in% c('a', 'b', 'c'))
} else expression(var1 %in% c('a', 'b', 'c') & eval(expr))
return(with(subset(dat, eval(sub)), mean(var3)))
}
getMean()
getMean(expression(var2 %in% c('a', 'b')))