Я пытаюсь использовать mapply
, чтобы применить t.test
к двум спискам аргументов. Первый список formulas
содержит три формулы, а второй список periods
содержит три вектора, которые подмножество my.data
, которое я передаю с аргументом MoreArgs
.mapply с аргументами как два списка (одна формула, один вектор)
Я могу сделать t.test
s вручную с помощью петли for
(также ниже), но я не могу понять, почему мое использование mapply
не выполняется. Неправильное время для использования mapply
?
# similar data
my.data <- data.frame(CAR1=rnorm(150),
CAR2=rnorm(150),
CAR3=rnorm(150),
period=rep(1:3, each=50),
treated=rep(1:2, times=75)
)
# two lists to pass as arguments to `t.test()`
# `subset`
periods <- list(my.data$period == 1,
my.data$period <= 2,
my.data$period <= 3
)
# `formula`
formulas <- list(CAR1 ~ treated,
CAR2 ~ treated,
CAR3 ~ treated
)
# manual solution works
ttests <- list()
for (i in 1:3) {
ttests[[i]] <- t.test(formulas[[i]],
data=my.data,
subset=periods[[i]]
)
}
# but `mapply` fails
ttest <- mapply(FUN=t.test,
formula=formulas,
subset=periods,
MoreArgs=list(data=my.data),
SIMPLIFY=FALSE
)
# with error "Error in eval(expr, envir, enclos) : object 'dots' not found"
Спасибо! Хорошая точка зрения! Но что, если мои периоды выборки не являются взаимоисключающими? (Я улучшу свой пример.) Вы бы предложили такой подход? Невозможно передать «подмножество» в список? –
Я добавил еще один пример того, как я построил список, который будет передан в 'mapply'. –