从公式中提取变量

时间:2016-11-18 10:16:12

标签: r

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

x1 <- ~responsename

as.character(x1[[2]])

x2 <- ~log(responsename)

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

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

ps:假设公式始终为~ responsename~ f(responsename),没有+等。

2 个答案:

答案 0 :(得分:3)

您的术语是非标准的(=错误!)。

(通常)单个&#34;响应变量&#34; (又名&#34;因变量&#34;)位于代字号~的左侧。

波浪号右侧的(通常)多个变量称为&#34;解释&#34;或&#34;预测者&#34;或者&#34;独立的&#34;变量

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

您可以使用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)

答案 1 :(得分:2)

tail(all.names(x1),1)

似乎做你想做的事。 e.g。

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"