假设一个列表对象和矢量: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