2012-03-10 43 views
0

我明顯還是不明白plyr的語法,如下圖所示。有人能幫我看看我錯過了什麼嗎?dlply與t.test的語法

下面的代碼工作正常,符合市場預期:

# make a data frame to use dlply on 
f <- as.factor(c(rep("a", 3), rep("b", 3))) 
y <- rnorm(6) 
df <- data.frame(f=f, y=y) 

# split the data frame by the factor and perform t-tests 
l <- dlply(df, .(f), function(d) t.test(y, mu=0)) 

但是,以下將導致錯誤

l_bad <- dlply(df, .(f), t.test, .mu=0) 
Error in if (stderr < 10 * .Machine$double.eps * abs(mx)) stop("data are essentially constant") : missing value where TRUE/FALSE needed 

這看起來有點彷彿R的努力上執行t.test因素。爲什麼會這樣?非常感謝。

回答

2

dlplydf拆分成幾個數據幀。這意味着,無論您傳遞給dply的任何函數都必須預期數據幀爲輸入。作爲第一個參數,t.test需要一個向量。

您的匿名函數dlply聲明d作爲其唯一參數。但在您致電t.test時,您只能通過y。對於y,R不會自動知道在數據幀d中看。相反,它可能會找到您在全球環境中定義的y

只需在第一個示例中將其更改爲t.test(d$y,mu = 0)即可使其正常工作。

第二個示例僅適用於要應用的函數期望將數據幀作爲輸入。 (即,參見summarisetransform)。

+0

這是非常有意義的。謝謝你解釋清楚! – 2012-03-10 21:18:44