2015-12-02 2 views
1

В R, как использовать apply с арифметическими функциями? Например, при т-по-п матрицу U, с колоннами c_1, C_2, ..., C_n, я хочу выполнить следующую операцию на каждой колонке c_i:Как использовать apply() с арифметическими функциями (R)

для каждого элемента и в c_i,

u<-u+min(c_i)*sign(min(c_i))*1.05 
+0

Я думаю, что вы хороший первый шаг должен был бы написать функцию, которая вводит вектор (столбец вашей матрицы) и выводит вектор так, как вы хотите. Затем вы можете использовать 'apply (U, 2, yourfunction)', чтобы применить его к каждому вектору в матрице. – Carl

+2

Не знаком 'min (c_i) * (min (c_i))' то же, что и 'abs (min (c_i))'? –

+0

@SamDickson хороший звонок. Для эффективности использование 'abs' намного лучше, потому что оно позволяет избежать дополнительного вызова' min'. –

ответ

1

это то, что вы ищете:

apply(U, 2, function(c_i) { c_i + min(c_i)*sign(min(c_i))*1.05 }) 
0

Я знаю, что вы просили ответа в отношении apply, однако, я думал, что будет включать в себя еще один подход, который может быть немного быстрее.

library(matrixStats) 
U + abs(colMins(U))[col(U)] * 1.05 

Dickson @ Сэм, спасибо за указание на то, что abs(min(c_i)) такое же, как min(c_i)*sign(min(c_i))

+0

Спасибо за эту альтернативу. Определенно стоит посмотреть. – ben