是否有一種雄辯的方式來使用ddply()
來獲得不僅定義最精細的組的輸出,而且還有這些子組的組?plyr與嵌套組?
換句話說,當其中一個分類器是「任何」或「任一」或「無關緊要」。在兩個分組變量的簡單情況下,可以通過單獨調用ddply
來完成;然而,當有三個或更多分類器可以設置爲「任何」時,由於必須反覆運行ddply
來爲每個新的「任何」+其他組合重複運行ddply
,所以這會變得混亂。
重複的例子:
require(plyr)
## create a data frame with three classification variables
## and two numeric variables:
df1=data.frame(classifier1 = LETTERS[sample(2,200,replace=T)],
classifier2 = letters[sample(3,200,replace=T)],
classifier3 = rep(c("foo","bar"),100),
VAR1 = runif(200,50,250),
VAR2 = rnorm(200,85,20))
## apply an arbitrary function to subsets of df1; that is, all unique
## combinations of the three classifiers.
dlply(df1, .(classifier1,classifier2,classifier3),
function(df) lm(VAR1 ~ VAR2, data=df))
$A.a.bar
Call:
lm(formula = VAR1 ~ VAR2, data = df)
Coefficients:
(Intercept) VAR2
230.5555 -0.8591
$A.a.foo
Call:
lm(formula = VAR1 ~ VAR2, data = df)
Coefficients:
(Intercept) VAR2
128.3078 0.3631
...
現在,如果我想獲得一些更多的組相同的輸出時,不包括任何/所有分類。例如,如果我想包括當classifier1 =「任何」,我只包括在dlply
聲明classifier2和classifier3,像這樣:
dlply(df1, .(classifier2,classifier3), function(df) lm(VAR1 ~ VAR2, data=df))
如果我當時就想獲得時classifier2輸出和classifier3 = 「任何」,我會再次從ddply
呼叫刪除,只包括classifier1:
dlply(df1, .(classifier1), function(df) lm(VAR1 ~ VAR2, data=df))
然而,這變得笨重,當我有更多的分類比3,而各分類可以取出來(即=「任何「) - 組合的數量大幅增加。是否有一種雄辯/快速的方式來獲取我的數據的所有「組羣」輸出?
您可以分別創建組合爲字符串,並直接通過他們沒有'()'使用語法的東西。像'expand.grid'。但我會建議問一個問題關於你的具體問題stats.exchange。我認爲比測試所有情況有更好的確定關係的算法。 – Justin 2013-03-25 01:59:01
賈斯汀 - 我的問題純粹是組織/計算。 lm'函數被包含作爲您或我想要使用的任意函數的佔位符。 – 2013-03-25 15:21:00