2017-02-14 44 views
2

上有交叉驗證,其中有人給兩個矢量的2個dataframes不是到t.test功能的問題:https://stats.stackexchange.com/questions/261830/t-test-or-wilcox-in-r-and-how-to-apply-to-dataframe-splitted-in-2-groups/- [R t.test()與data.frames作爲參數

較短例如參見此代碼

a <- data.frame(foo=1:5, bar=5:9) 
b <- data.frame(foo=1:5, bar=5:9) 
t.test(a,b) 

help頁爲t.test功能明確指出,x和y應該是

(非空)數值向量的數據值。

儘管如此上述代碼拋出沒有錯誤,但給出了結果。結果的含義是什麼?

+0

我會懷疑'了'和'B'被強制爲載體,這就是什麼正在測試。比較你的結果與't.test(as.vector(as.matrix(a)),as.vector(as.matrix(b)))''。順便說一下,我的代碼沒有收到任何錯誤。 –

+0

是的,這會產生相同的結果。不過,奇怪的是,數據幀被強制。這種行爲如何有用? – CarlAH

+0

我個人認爲,這肯定會拋出一個錯誤或者至少是一個警告。 – Bernhard

回答

2

這是無證的行爲,但經過data.frames當你違背文檔。

出現這種情況:

x <- a 
y <- b 
yok <- !is.na(y) 
xok <- !is.na(x) 
y <- y[yok] 
#[1] 1 2 3 4 5 5 6 7 8 9 
x <- x[yok] 
#[1] 1 2 3 4 5 5 6 7 8 9 

基本上,你會得到相同的結果,如果你沒有t.test(unlist(a), unlist(b))

3

你可以看看裏面的代碼:

stats:::t.test.default 

我showned這裏的一些代碼所選作品

function (x, y = NULL, alternative = c("two.sided", "less", "greater"), 
    mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95, 
    ...) 
{ 
    alternative <- match.arg(alternative) 
    if (!missing(mu) && (length(mu) != 1 || is.na(mu))) 
    ### snip 
    if (!is.null(y)) { 
    ### snip 
     yok <- !is.na(y) 
     xok <- !is.na(x) 
    ### snip 
     y <- y[yok] 

所以我們有AY參數,你會看到,yok會導致到在y[yok]中使用時將變成矢量的選擇。最後,一切都將發生在data.frame強制向量(as.vector)上。

明確不是什麼人會打算做,但也會錯過,規格從用戶...

+0

是的,如果(他)沒有嘗試執行'wilcox.test',那麼這個錯誤指定就會被忽視。 – Bernhard