2013-08-19 48 views
3

道歉,我剛剛意識到,這已經被回答here結果與R轉換

這應該是非常基本的,但我不明白爲什麼會發生。有人可以幫忙嗎?這是簡單的代碼與示例「數據」:

applyDirichletPrior <- function (row_vector) { 
    row_vector_added <- row_vector + min (row_vector) 
    row_vector_result <- row_vector_added/sum(row_vector_added) 
} 
data <- matrix(c(1,2,3,4,5,6,7,8), nrow=2, ncol=4) 
applied <- apply(data, 1, function(x) applyDirichletPrior(x)) 

輸出被給定爲:

> applied 
    [,1]  [,2] 
[1,] 0.1 0.1428571 
[2,] 0.2 0.2142857 
[3,] 0.3 0.2857143 
[4,] 0.4 0.3571429 

儘管我期望在相同的格式作爲輸入數據的輸出,如:

> applied 
      [,1]  [,2]  [,3]  [,4] 
[1,] 0.1000000 0.2000000 0.3000000 0.4000000 
[2,] 0.1428571 0.2142857 0.2857143 0.3571429 

爲什麼和在什麼階段期間apply被轉置怎麼回事?

+0

參見https://stat.ethz.ch/pipermail/r-help/2006-January/086064.html和討論在http://www.jstatsoft.org/v40/i01 – hadley

回答

6

結合各個應用步驟的結果有點武斷。你的期望有什麼不同?你看到的行爲是文檔如何描述它:

如果每次調用「FUN」返回長度的矢量「N」,那麼「應用」 返回尺寸c(N,暗淡的」的陣列( X)[MARGIN])'if'n> 1'。

請注意,您可以輕鬆地之後進行轉置:

> t(applied) 
      [,1]  [,2]  [,3]  [,4] 
[1,] 0.1000000 0.2000000 0.3000000 0.4000000 
[2,] 0.1428571 0.2142857 0.2857143 0.3571429 
+1

+1中,另一種方法是返回一個列表,然後調用'rbind'。 'do.call(rbind,unlist(apply(data,1,function(x)list(applyDirichletPrior(x))),rec = FALSE))' – Arun

+0

我期待函數修改(2 * 4)矩陣在每一行應用指示的功能,然後產生與輸入具有相同尺寸的輸出。我瞭解,申請不符合此目的。 – Rhubarb