2017-04-20 73 views
6

下面的代碼:爲什麼R的應用函數將行與列混淆?

set.seed(0) 
m<-matrix(data=runif(6),nrow=2) 

apply(m,1,print) 
apply(m,1,function(x) print(x)) 

給出:

[1] 0.8966972 0.3721239 0.9082078 
[1] 0.2655087 0.5728534 0.2016819 
      [,1]  [,2] 
[1,] 0.8966972 0.2655087 
[2,] 0.3721239 0.5728534 
[3,] 0.9082078 0.2016819 

所以,一次打印執行逐行其他時間逐列。爲什麼?在我的理解中,申請/打印的這兩個要求應該完全一樣。

回答

6

有兩件事情在這裏區分:什麼print打印,以及它回報

數字矢量的print方法會將矢量的內容打印到屏幕上。這是你得到了輸出的第一部分:

[1] 0.8966972 0.3721239 0.9082078 
[1] 0.2655087 0.5728534 0.2016819 

這裏,第一行是您的矩陣的第1行的打印輸出,第二行是行打印輸出2.

除此之外,print方法與其他函數一樣是一個函數;它返回一個值。它返回的值是(對於默認方法)傳遞給它的值。這個返回值作爲一系列向量傳遞迴applyapply然後連接這些載體到基質:

  [,1]  [,2] 
[1,] 0.8966972 0.2655087 
[2,] 0.3721239 0.5728534 
[3,] 0.9082078 0.2016819 

爲什麼向量視爲列向量?因爲這就是apply所做的。從?apply

如果每次調用FUN返回長度爲n的矢量,然後應用返回尺寸c(N,暗淡(X)[MARGIN])如果n>的陣列1.如果n等於1,則如果MARGIN具有長度1並且維數dim(X)[數組[MARGIN],則apply返回一個向量。