【问题标题】:Subsetting formula objects in RR中的子集公式对象
【发布时间】:2019-08-14 02:25:18
【问题描述】:

鉴于下面的任何 formula 对象(例如 f),我想知道如何将 tilda 符号它之后的所有内容 分开并将其转换为formula 对象?

我的期望输出仅在本例中是:~ es.type+weeks 作为formula 对象。

注意:f 可以是任何公式,上面的f 只是一个示例。我正在寻找一个通用的解决方案。

f <- formula(dint ~ es.type+weeks) # Only as an example

g <- paste0(f[[1]], f[[3]]) # No success

as.formula(g)    # No success

【问题讨论】:

  • 您可能需要all.vars(f)

标签: r regression subset lm


【解决方案1】:

您可以直接操作公式:

f <- y ~ x1 + x2:x3

f[[2]] <- f[[3]]
f[[3]] <- NULL

identical(f, ~ x1 + x2:x3)
# TRUE

【讨论】:

    【解决方案2】:

    一个选项是根据公式中的术语数删除术语

    g <- formula(drop.terms(terms(f), 3))
    g
    #~es.type + weeks
    
    f1 <- formula(dint ~ es.type:weeks)
    formula(drop.terms(terms(f1), 3))
    #~es.type:weeks
    

    最好创建一个函数来应用不同的公式

    form1 <- function(form) {
          i1 <- length(terms(form)) + 1
           formula(drop.terms(terms(form), i1))
    
     }
    f1 <- formula(dint ~ es.type+weeks+dd)
    f2 <- formula(dint ~ es.type+weeks) 
    form1(f1)
    #~es.type + weeks + dd
    form1(f2)
    #~es.type + weeks
    

    如果我们需要添加一个新术语

    update(form1(f2), ~time +.)
    #~time + es.type + weeks
    

    【讨论】:

    • 这看起来不必要的复杂
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多