即使该公式包含函数,是否可以从公式中提取响应变量?从公式中提取变量
x1 <- ~responsename
as.character(x1[[2]])
x2 <- ~log(responsename)
as.character(x2[[2]][[2]])
这两种方法都给出了所需的答案("responsename"
)。但有没有办法在或的情况下自动获得相同的答案?
PS:假设公式总是~ responsename
或~ f(responsename)
,没有+
等
即使该公式包含函数,是否可以从公式中提取响应变量?从公式中提取变量
x1 <- ~responsename
as.character(x1[[2]])
x2 <- ~log(responsename)
as.character(x2[[2]][[2]])
这两种方法都给出了所需的答案("responsename"
)。但有没有办法在或的情况下自动获得相同的答案?
PS:假设公式总是~ responsename
或~ f(responsename)
,没有+
等
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"
您的术语是非标准的(=错误!)。
(通常)单个“响应变量”(又名“因变量”)位于代字号~
的左侧。
代字号右边的(通常是)多个变量被称为“解释性”或“预测变量”或“独立”变量。
你的例子是没有响应变量的单边公式。
您可以使用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中有更广泛的用途,这是为了捕捉表达式及其环境。请参阅http://adv-r.had.co.nz/Expressions.html – AndrewMacDonald
您是否试图说您对“响应变量”这个术语的使用以任何方式标准化? – user20637