【问题标题】:Extracting a variable from a formula从公式中提取变量
【发布时间】:2016-11-18 10:16:12
【问题描述】:

有没有办法从公式中提取响应变量,即使该公式包含函数?

x1 <- ~responsename

as.character(x1[[2]])

x2 <- ~log(responsename)

as.character(x2[[2]][[2]])

这两种方法都给出了所需的答案 ("responsename")。但是有没有办法在任何一种情况下自动获得相同的答案?

ps:假设公式总是~ responsename~ f(responsename),没有+

【问题讨论】:

    标签: r


    【解决方案1】:

    您的术语不符合标准(=错误!)。

    (通常)单个“响应变量”(又名“因变量”)位于波浪号 ~ 的左侧。

    波浪号右侧的(通常)多个变量被称为“解释性”或“预测”或“独立”变量。

    您的示例是没有响应变量的单边公式。

    可以使用all.vars()获取变量名; @Miff,all.names() 也返回函数名称。

    我猜哪里有一个响应变量,它通常是第一个,所以你可以使用all.vars(formula)[1],但是(就像你的例子)它是一个没有响应的单边公式,这将给出第一个解释变量。

    更好的是用attr(terms(formula), "response")标识响应变量

    f <- y ~ x1 + x2
    all.vars(f)[attr(terms(f), "response")]
    # [1] "y"
    f <- y ~ sin(x1) + cos(x2)
    all.vars(f)[attr(terms(f), "response")]
    # [1] "y"
    f <- ~ x1 + x2
    all.vars(f)[attr(terms(f), "response")]
    # character(0)
    f <- log(y) ~ x1 + x2
    all.vars(f)[attr(terms(f), "response")]
    # [1] "y"
    

    如果你真的想要(最后指定的)解释变量,那么你可以使用tail(all.vars(formula),1)

    【讨论】:

    • 你说的很对,公式通常用于表达统计模型。当然,terms() 返回一个带有“response”属性的对象,它位于左侧。然而,这只是公式的一种用途。您可能有兴趣知道它们在 R 中有更普遍的用途,即捕获表达式及其环境。参见例如adv-r.had.co.nz/Expressions.html
    • 您是否想说您对“响应变量”一词的使用是标准的?
    【解决方案2】:
    tail(all.names(x1),1)
    

    似乎做你想做的事。例如

    tail(all.names(x2),1)
    #[1] "responsename"
    tail(all.names(x1),1)
    #[1] "responsename"
    tail(all.names(~sin(responsename)),1)
    #[1] "responsename"
    tail(all.names(~(responsename)^2),1)
    #[1] "responsename"
    

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 2015-08-26
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多