1
,爲了從較舊的(N * 3)生成一個新的矩陣(N * 6),是否有比下一個更好的方法它不必「解開/取消列表」在apply函數中創建的內部列表,以便「展開」源矩陣?用矩陣表示,並且用語言R列出
transformed <- matrix(byrow=T)
transformed <- as.matrix(
do.call("rbind", as.list(
apply(dataset, 1, function(x) {
x <- list(x[1], x[2], x[3], x[2]*x[3], x[2]^2, x[3]^2)
})
))
)
#Unpack all inner lists from the expanded matrix
ret_trans <- as.matrix(apply(transformed, 2, function(x) unlist(x)))
編輯:我添加的那個
dataset
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 2 7 12
[3,] 3 8 13
[4,] 4 9 14
[5,] 5 10 15
和應用該代碼的示例以上我想擴大到N * 6,5 * 6(對不起,我拼錯列維度那裏和的餘量應用函數)應該是這樣的
transformed
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 6 11 66 36 121
[2,] 2 7 12 84 49 144
[3,] 3 8 13 104 64 169
[4,] 4 9 14 126 81 196
[5,] 5 10 15 150 100 225
的問題是,如果有這樣做的另一種方式,而不必使用過去的應用功能,而不必強迫在x是一個列表 感謝所有您的答覆
怎麼辦當你做'x [2]%*%x [3]'時,你會期望發生。你只是乘以兩個標量。爲什麼不使用'x [2] * x [3]'? –
是不是你的原始矩陣N * 3而不是N * 2像你說的那樣?應用「MARGIN」應該是「1」還是「2」?你如何在一個小例子上展示你的預期輸出是什麼?然後看看'cbind(x,x [,2] * x [,3],x [,2]^2,x [,3]^2)'是不是...... – flodel
@flodel&SimonO101你們都是正確的,交叉產品是一個拼寫錯誤以及保證金,我在R的一開始,所以對所有的錯誤 –