2016-05-01 14 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

'的eval(替代(2 * A + 3 * B ),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

另一種選擇是通過列表的序列循環,然後乘以

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

對於list和兩個元件

vector
lst[[1]]*vec[1] + lst[[2]] * vec[2] 
相關問題