首页 > 解决方案 > 将逗号分隔的向量转换为由 + 分隔的预测变量列表

问题描述

我想将我手动创建的逗号分隔向量直接传递给 glm 模型。该模型需要用加号分隔预测变量,所以我想知道当我将向量传递给模型+时,是否有一种聪明的方法可以用 s 替换,s ?+

例如,假设我有这两个向量:

fruits <- c('apples', 'bananas', 'pears', 'apricots')
colors <- c('blue', 'red', 'orange', 'purple')

目前,我只是复制预测变量并+手动添加符号。例如

glm(dependent_var ~ apples + bananas + pears + apricots + blue + red + orange + purple, data = df, family = "binomial")

我想做的是找到一种方法来减少手动操作。例如,有没有一种方法可以让我基本上只复制向量名称本身?就像是

glm(dependent_var ~ fruits + colors, data = df, family = "binomial")

标签: rstring

解决方案


您可以将模型输入粘贴在一起并将其转换为公式对象。

这是一个例子:

head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

x1 <- c("cyl", "disp")
x2 <- c("drat", "wt")
y <- "mpg"

my_formula <- as.formula(paste0(y, "~", paste0(c(x1, x2), collapse = "+")))

# "my_formula" gives:
# mpg ~ cyl + disp + drat + wt

lm(my_formula, data = mtcars)

Call:
lm(formula = my_formula, data = mtcars)

Coefficients:
(Intercept)          cyl         disp         drat           wt  
  41.160271    -1.786074     0.007472    -0.010492    -3.638075  

推荐阅读