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的一开始,所以对所有的错误 –