R.将不同的标量乘以列表中的每个元素,并对元素求和
假设一个列表对象和一个向量:R.将不同的标量乘以列表中的每个元素,并对元素求和,r,list,R,List,假设一个列表对象和一个向量: lst <- list(a = matrix(1:9, 3), b = matrix(2:10, 3)) vec <- c(2, 3) 我可以通过 matrix(apply(mapply("*", lst, vec), 1, sum), 3, 3) 但这看起来有点麻烦 有没有一种有效的方法可以得到同样的结果?不确定是否更有效,但这里有一个更简洁的想法。您可以使用Map()进行乘法运算,使用Reduce()进行求和运算 Reduce("+", Map(
lst <- list(a = matrix(1:9, 3), b = matrix(2:10, 3))
vec <- c(2, 3)
我可以通过
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
另外,在代码中,可以将
apply()
调用替换为rowSums()
。这可能会提高您所做工作的效率。另一个选项是循环列表顺序,然后进行乘法运算
Reduce(`+`,lapply(seq_along(lst), function(i) lst[[i]]*vec[i]))
对于两个元素的列表
和向量
lst[[1]]*vec[1] + lst[[2]] * vec[2]
非常感谢你!它看起来好多了。
eval(替换(2*a+3*b),lst)
有效,不过我现在知道“高效”是否是我用来描述它的一个词。。。
lst[[1]]*vec[1] + lst[[2]] * vec[2]