在语言 R 中,为了从旧矩阵 (N*3) 生成新矩阵 (N*6),有没有比下一个更好的方法来做到这一点,而不必“解包/取消列出”内部列表在应用函数中创建以“扩展”源矩阵?
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
问题是是否有另一种方法可以做到这一点,而不必使用最后一个 apply 函数,而不必强制 x 成为一个列表,谢谢大家的回复