2017-06-20 33 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