【问题标题】:Take elements out of quotes in R [duplicate]从R中的引号中取出元素[重复]
【发布时间】:2017-06-20 14:45:33
【问题描述】:

我正在尝试构建一个 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 = "+")')

通过阅读 Stackoverflow 上的其他一些类似的问题,有人建议使用 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 = "+"))'

【问题讨论】:

    标签: r model paste


    【解决方案1】:

    公式不仅仅是没有引号的字符串。它是未评估符号的集合。尝试使用 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  
      

      【讨论】:

        猜你喜欢
        • 2021-03-10
        • 1970-01-01
        • 2021-09-14
        • 2020-03-15
        • 2020-12-24
        • 2017-04-15
        • 2022-01-11
        • 1970-01-01
        • 2020-04-10
        相关资源
        最近更新 更多