假設一個列表對象和矢量: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)
但這看起來有點麻煩。
有沒有一種有效的方法來獲得相同的結果?
假設一個列表對象和矢量: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)
但這看起來有點麻煩。
有沒有一種有效的方法來獲得相同的結果?
不知道它是否更有效,但這裏有一個更清潔的想法。您可以使用Map()
進行乘法,使用Reduce()
進行求和。
Reduce("+", Map("*", lst, vec))
# [,1] [,2] [,3]
# [1,] 8 23 38
# [2,] 13 28 43
# [3,] 18 33 48
而且,在你的代碼,你可以用rowSums()
更換apply()
電話。這可能會提高你所做的工作的效率。
非常感謝!它看起來好多了。 –
另一種選擇是通過列表的序列循環,然後乘以
Reduce(`+`,lapply(seq_along(lst), function(i) lst[[i]]*vec[i]))
對於list
和兩個元件
vector
lst[[1]]*vec[1] + lst[[2]] * vec[2]
'的eval(替代(2 * A + 3 * B ),lst)'的作品,但我現在知道如果「高效」是一個詞,我會用它來形容它... – r2evans