У меня есть функция, которая принимает 2 аргумента (фрейм данных и имя столбца для зависимой переменной), и я хочу, чтобы выходные данные были вектором (зависимой переменной) и фреймом данных, исключая зависимую переменную.
df_handler = function(dataframe_allVars, dependent){
depend.var = eval(substitute(dependent))
pars <- as.list(match.call()[-1])
dependent = pars$dependent
indep.vars = dataframe_allVars[,-which(names(dataframe_allVars) == as.character(pars$dependent))]
return(list(depend.var, indep.vars))
}
При применении к файлу данных Aids2 из библиотеки MASS
library(MASS)
head(Aids2)
attach(Aids2)
с зависимой переменной «status» я получаю ожидаемый результат.Список с 2 элементами, 1-й - это фактор (статус мертв или жив), а 2-й - это исходный кадр данных Aids2 без столбца «статус»
df_handler(Aids2, status)
[[1]]
[1] D D D D D D D D D D D D D D A D D A A D D A A A D A A A A A A D
A D A A D D D D D D D D D D D D D D D D D D D D D
[58] D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D D D D D D D D D D D D D D D D D D D D D D D D D
[115] D D D D D D D D D D D D D D D D D D D D D D D D A D D D D D D D
[ reached getOption("max.print") -- omitted 1843 entries ]
Levels: A D
[[2]]
state sex diag death T.categ age
1 NSW M 10905 11081 hs 35
2 NSW M 11029 11096 hs 53
3 NSW M 9551 9983 hs 42
4 NSW M 9577 9654 haem 44
5 NSW M 10015 10290 hs 39
, а начальный -
╔════════════════════════════════════════════╗
║ state sex diag death status T.categ age ║
╠════════════════════════════════════════════╣
║ 1 NSW M 10905 11081 D hs 35 ║
║ 2 NSW M 11029 11096 D hs 53 ║
║ 3 NSW M 9551 9983 D hs 42 ║
║ 4 NSW M 9577 9654 D haem 44 ║
║ 5 NSW M 10015 10290 D hs 39 ║
║ 6 NSW M 9971 10344 D hs 36 ║
╚════════════════════════════════════════════╝
Затем я пытаюсь вложить функцию df_handler в другую функцию с именем multi_log_reg, чтобы выполнить логистическую регрессию по столбцам кадра данных
# glm modified for use in lapply
glm_for_apply = function(x, depend.var){
mod = glm(depend.var ~ x, family = binomial(link = "logit"))
}
# run log regression on dataframe, given the dependent variable
multi_log_reg = function(dataframe_allVars, dependent){
depend.var = df_handler(dataframe_allVars, dependent)[1]
indep.vars = df_handler(dataframe_allVars, dependent)[2]
print(depend.var)
print(indep.vars)
mod = lapply(indep.vars, FUN = glm_for_apply, depend.var)
}
Запуск multi_log_reg (Aids2, status) я получаю следующую ОШИБКУ:
[[1]]
[1] D D D D D D D D D D D D D D A D D A A D D A A A D A A A A A A D
A D A A D D D D D D D D D D D D D D D D D D D D D
[58] D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D D D D D D D D D D D D D D D D D D D D D D D D D
[115] D D D D D D D D D D D D D D D D D D D D D D D D A D D D D D D D
[ reached getOption("max.print") -- omitted 1843 entries ]
Levels: A D
[[1]]
data frame with 0 columns and 2843 rows
Error in model.frame.default(formula = depend.var ~ x,drop.unused.levels = TRUE) :
invalid type (list) for variable 'depend.var'
Любая помощь?