Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R.将不同的标量乘以列表中的每个元素,并对元素求和_R_List - Fatal编程技术网

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]