2016-11-18 114 views
3

即使該公式包含函數,是否可以從公式中提取響應變量?從公式中提取變量

x1 <- ~responsename 

as.character(x1[[2]]) 

x2 <- ~log(responsename) 

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

這兩種方法都給出了所需的答案("responsename")。但有沒有辦法在的情況下自動獲得相同的答案?

PS:假設公式總是~ responsename~ f(responsename),沒有+

回答

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" 
3

您的術語是非標準的(=錯誤!)。

(通常)單個「響應變量」(又名「因變量」)位於代字號~的左側。

代字號右邊的(通常是)多個變量被稱爲「解釋性」或「預測變量」或「獨立」變量。

你的例子是沒有響應變量的單邊公式。

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

+0

你說的很對,公式通常用於表達統計模型。當然,'terms()'返回一個帶有「response」屬性的對象,它位於左側。但是,這只是公式的一種用法。您可能有興趣知道它們在R中有更廣泛的用途,這是爲了捕捉表達式及其環境。請參閱http://adv-r.had.co.nz/Expressions.html – AndrewMacDonald

+0

您是否試圖說您對「響應變量」這個術語的使用以任何方式標準化? – user20637