2016-05-01 7 views
1

リストオブジェクトとベクトルを仮定しますR.乗算要素の上にリストと合計のすべての要素に異なるスカラー

lst <- list(a = matrix(1:9, 3), b = matrix(2:10, 3)) 
vec <- c(2, 3) 

そして私は

2 * a + 3 * b 

のような結果を取得したいです私はこれを解決する

matrix(apply(mapply("*", lst, vec), 1, sum), 3, 3) 

しかし、これは少し面倒です。

同じ結果を得る効率的な方法はありますか?

+1

'評価(代替(2 * A + 3 * bのlistvectorについて

Reduce('+',lapply(seq_along(lst), function(i) lst[[i]]*vec[i])) 

を乗算します)、lst) 'が働いていますが、私は今、"効率的 "が私がそれを記述するために使用する単語であることを知っています... – r2evans

答えて

1

これ以上効率的かどうかはわかりませんが、少し洗練されたアイデアがあります。乗算にはMap()を使用し、合計にはReduce()を使用できます。

Reduce("+", Map("*", lst, vec)) 
#  [,1] [,2] [,3] 
# [1,] 8 23 38 
# [2,] 13 28 43 
# [3,] 18 33 48 

また、あなたのコードでは、あなたはrowSums()apply()呼び出しを置き換えることができます。おそらくあなたがしたことの効率を改善するでしょう。

+0

ありがとうございました!はるかに良く見えます。 –

0

別のオプションは、リストの順序をループであり、2つの要素

lst[[1]]*vec[1] + lst[[2]] * vec[2] 
関連する問題