我基本上是 R 的初學者,我的問題很可能有一個非常基本的答案,但經過多次嘗試,我就是無法弄清楚我的函式總是回傳轉置輸出的原因。任何幫助深表感謝。我正在使用 Rstudio IDE,R 4.1.2。
我的目標是撰寫一個函式來向任何給定的資料幀添加兩個額外的列,它們分別對應于每行的平均值和最大值。
所以我創建了一個示例資料框:
a <- c(1:10)
b <- c(11:20)
c <- c(21:30)
df <- data.frame(a,b,c)
然后我寫了以下函式:
desc_n <- function(x){
return(cbind(
mean(x, na.rm=T),
max(x,na.rm=T))
)
}
之后,我使用 apply() 函式將我新定義的 desc_n 函式應用于 df 資料幀的每一行。
n_df <- apply(df, 1, desc_n)
然而,雖然輸出在數學上是正確的,但它是轉置的。輸出:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 11 12 13 14 15 16 17 18 19 20
[2,] 21 22 23 24 25 26 27 28 29 30
雖然我預計它是 10 行和 2 列。無論我做什么,輸出都保持不變。我知道如何將輸出轉換為我的偏好,但這對我來說主要是一個學習示例。所以我有兩個問題:
- 為什么 desc_n 函式在我使用 cbind 時回傳 [2,10] 輸出?它不應該回傳 [10,2] 輸出嗎?
- 為什么將 desc_n 函式中的 cbind 更改為 rbind 會回傳完全相同的結果?
再次感謝任何幫助。謝謝你。
uj5u.com熱心網友回復:
您的結果由 組裝apply,它apply決定了輸出(當然,desc_n一路上使用您的函式)。
從?apply幫助頁面:
如果每次呼叫都
FUN回傳一個長度為 的向量n,并且simplify為TRUE,則apply回傳一個維數為的陣列c(n, dim(X)[MARGIN])
無論您以哪種方式系結它,您的desc_n函式都會回傳長度為 2 的內容,因此您會在應用簡化輸出中獲得 2 行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/421085.html
標籤:
