使用glm函数应用一个列表

3

我试图将存储在列表中的变量放入 glm 函数中,但遇到了困难。我的数据框具有许多变量,因此一一键入独立变量到 glm 中会需要太多工作。假设我的数据框是:

df <- data.frame(
  id = c(1,2,3,4,5),
  `sitting position` = c("A","B","A","A","B"),
  `variable one` = c("left", "left", "right", "right", "left"),
  `variable two` = c(50, 30, 45, 80, 57),
  `variable three` = c("m","w","w","m","m"),
  check.names = FALSE)

我想在glm函数中使用的列的列表如下所示。

columns <- dput(colnames(df))[-c(1:2)]

columns 
[1] "variable one"   "variable two"   "variable three"

现在我希望将这个列表直接放入一个glm函数中,类似于:
glm(`sitting position` ~ columns, data = df, familiy = binomial).

取代

glm(`sitting position` ~ `variable one` + `variable two` + `variable three`, data = df, family = binomial())

我知道仅仅添加列表是无法解决这个问题的,但我也找不到解决方法。
1个回答

3
也许我们可以使用reformulate。reformulate可以从字符向量创建公式。我们可以将reformulate的输出馈入glm函数的formula参数。
我包含了一个初步步骤,使用janitor::clean_names将列名替换为更清晰、更少有错误的替代名称。
library(janitor)

df<-df %>% clean_names
columns<-c('variable_one', 'variable_two', 'variable_three')

下面是实际解决方案:

glm(formula=reformulate(termlabels = columns, response='sitting_position'), data=df)

看一下 reformulate 是如何工作的:

reformulate(termlabels = columns, response='sitting_position')

sitting_position ~ variable_one + variable_two + variable_three

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接