в языке R, чтобы сгенерировать новую матрицу (N * 6) как из более старой (N * 3), есть лучший способ, чем следующий без необходимости «распаковывать/исключать» внутренние списки, созданные в функции apply, чтобы «расширить» исходную матрицу?do.call in 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)))
EDIT: Я добавить пример того
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 [2]% *% x [3]'. Вы просто умножаете два скаляра. Почему бы не использовать 'x [2] * x [3]'? –
не ваша оригинальная матрица N * 3, а не N * 2, как вы говорите? Если 'apply'-ed' MARGIN' будет '1', а не' 2'? Что вы можете показать на небольшом примере, каков ваш ожидаемый результат? И посмотрите, если 'cbind (x, x [, 2] * x [, 3], x [, 2]^2, x [, 3]^2)' это ... – flodel
@flodel & SimonO101 вы оба правильно, кросс-продукт - это опечатка, а также маржа, я нахожусь в начале R, поэтому извините за все ошибки. –