【问题标题】:Dynamically update formula with vector under R 4.0.0 and higher在 R 4.0.0 及更高版本下使用向量动态更新公式
【发布时间】:2021-01-01 14:23:49
【问题描述】:

我想用 R 4.0.0 或更高版本的向量动态更新公式。因此,一切都与此链接下的相同 - R: Dynamically update formula - 但 x 现在是一个向量,R 版本 >= 4.0。 简而言之,我有一个公式,例如y ~ 1,并希望通过字符标量 myvar1 或字符向量 myvar2 对其进行更新。 对于字符向量和 R 版本 >= 4.0.0,建议的解决方案对于字符向量失败。在 4.0.0 的发行说明中,这被称为错误修复。该说明指出“长度(x)> 1 字符向量的公式(x)现在已弃用。这种使用很少见,并且仅在某些情况下按预期“工作”。在其他情况下,错误的 x 一直默默无闻截断,未检测到以前的错误。” (https://cran.r-project.org/doc/manuals/r-patched/NEWS.html)

myvar1 <- "x1"
myvar2 <- c("x1", "x2")
update(y ~ 1 , paste(" ~ . +", myvar1))
# y ~ x1
update(y ~ 1 , paste(" ~ . +", myvar2))
# y ~ x1
# Warning message:
# Using formula(x) is deprecated when x is a character vector of length > 1.
  Consider formula(paste(x, collapse = " ")) instead. 

那么,在 R 4.0.0 及更高版本中,如何使用字符向量更新公式?

【问题讨论】:

    标签: r


    【解决方案1】:

    您现在需要做的是操作您的字符串,以便获得:"~ . + x1 + x2"

    myvar2 <- c("x1", "x2")
    
    formula_update <- paste(
      "~ . +",
      paste(myvar2, collapse = " + ")
    )
    
    formula_update 
    [1] "~ . + x1 + x2"
    
    update(y ~ 1, formula_update)
    y ~ x1 + x2
    

    【讨论】:

      【解决方案2】:

      你会考虑

      reformulate(myvar1, response="y")
      

      可接受的替代品? (它不会完全做同样的事情,但可能会起作用。)

      您还可以将更新参数设为公式...

      update(y~1, reformulate(c(".",myvar1)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 2021-03-29
        • 1970-01-01
        相关资源
        最近更新 更多