【问题标题】:Creating formula using very long strings in R在 R 中使用非常长的字符串创建公式
【发布时间】:2015-04-10 07:13:47
【问题描述】:

我的情况是,我有一个向量,其中包含一个非常大的数据框的列名。

假设:x = c("Name", "address", "Gender", ......, "class" ) [大约 100 个变量]

现在,我想创建一个公式,我最终将使用它来创建HoeffdingTree。 我正在使用以下方法创建公式:

myformula <- as.formula(paste("class ~ ", paste(x, collapse= "+")))

这会引发以下错误:

解析错误(文本 = x)::1:360:意外的“其他” 1:e+spread+prayforsonni+just+want+amp+argue+blxcknicotine+mood+now+right+actually+herapatra+must+simply+suck+there+always+cookies+ever+everything+getting+nice+nigga+他们+times+abu+all+alliepickl

上述语句中的paste 部分工作正常,但将其作为参数传递给as.formula 会引发各种奇怪的问题。

【问题讨论】:

  • 您有名为“else”的列吗?似乎抛出了一个错误:as.formula(paste("class ~ ", paste(c("or","else"), collapse= "+"))) 解析错误(text = x,keep.source = FALSE)::1:13: unexpected 'else' 1: class ~ or+else

标签: r formula


【解决方案1】:

问题是您将 R 关键字用作列名。 else 是一个关键字,因此您不能将其用作常规名称。

一个简化的例子:

s <- c("x", "else", "z")
f <- paste("y~", paste(s, collapse="+"))
formula(f)
# Error in parse(text = x) : <text>:1:10: unexpected '+'
# 1: y~ x+else+
#              ^

解决方案是将您的单词用反引号“`”括起来,以便 R 将它们视为非语法变量名。

f <- paste("y~", paste(sprintf("`%s`", s), collapse="+"))
formula(f)
# y ~ x + `else` + z

【讨论】:

    【解决方案2】:

    你可以先减少你的数据集

    dat_small <- dat[,c("class",x)]
    

    然后使用

    myformula <- as.formula("class ~ .")
    

    . 表示使用所有其他(除类之外的所有)列。

    【讨论】:

      【解决方案3】:

      你可以试试reformulate

       reformulate(setdiff(x, 'class'), response='class')
       #class ~ Name + address + Gender
      

      “x”在哪里

        x <- c("Name", "address", "Gender", 'class')
      

      如果R关键字在'x'中,你可以这样做

         reformulate('.', response='class')
         #class ~ .
      

      【讨论】:

        猜你喜欢
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 2016-03-28
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多