2017-06-20 34 views
1

我想构建一个R闪亮的应用程序,其中有用户为模型选择变量。用户选择的元素被放入向量中。我如何删除引号以及在他们选择的每个元素之间放置空格,以便成为模型中的变量?以R中的引号取出元素

举个例子:

> vars <- c("cyl", "disp", "hp") 
> my.model <- lm(mpg ~ paste(vars, collapse = "+"), data = mtcars) 

给出了错误:

Error in model.frame.default(formula = mpg ~ paste(vars, collapse = "+"), : 
variable lengths differ (found for 'paste(vars, collapse = "+")') 

从阅读#2等有点类似的问题,有人建议使用as.name()来删除引号,但这会产生另一个错误:

> vars <- c("cyl", "disp", "hp") 
> my.model <- lm(mpg ~ as.name(paste(vars, collapse = "+")), data = mtcars) 
Error in model.frame.default(formula = mpg ~ as.name(paste(vars, collapse = "+")), : 
invalid type (symbol) for variable 'as.name(paste(vars, collapse = "+"))' 

回答

2

公式不仅仅是一个没有引号。这是一组未经评估的符号。尝试使用reformulate函数中的构建来构建您的公式。

vars <- c("cyl", "disp", "hp") 
my.model <- lm(reformulate(vars,"mpg"), data = mtcars) 
2

as.formula应该能够强制串成式

lm(as.formula((paste("mpg ~", paste(vars, collapse = "+")))), data = mtcars) 

#Call: 
#lm(formula = as.formula((paste("mpg ~", paste(vars, collapse = "+")))), 
# data = mtcars) 

#Coefficients: 
#(Intercept)   cyl   disp   hp 
# 34.18492  -1.22742  -0.01884  -0.01468