簡體   English   中英

R:使用 glm-function 應用列表

[英]R: Apply a list with glm-function

我在嘗試將列表中的變量放入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())

我知道我不能僅通過添加列表來工作,但我也找不到解決此問題的解決方案。

也許我們可以使用reformulate 重新制定將從字符向量創建公式。 我們可以將glm的輸出輸入到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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM