几个向量的乘法
Multiplication of several vectors
我有 10 个向量(v_1 到 v_10),我需要将它们全部乘以另一个向量 v_mult(即 v_1*v_mult, v_2*v_mult 等)。如何在 for 循环中解决这个问题?我坚持使用循环解决方案(我没有找到),因为它是更大分析的一部分。
v_10<-c(2, 3, 5, 8)
v_20<-c(3, 9, 0, 1)
v_30<-c(15, 9, 6, 0)
v_40<-c(4, 9, 6, 1)
v_50<-c(1, 7, 3, 9)
v_60<-c(5, 9, 5, 1)
v_70<-c(5, 8, 2, 6)
v_80<-c(5, 8, 1, 6)
v_90<-c(5, 0, 1, 6)
v_10<-c(2, 8, 1, 0)
v_mult<-c(8, 5, 1, 9)
我们可以使用 mget
获取 list
中的所有向量对象,并使用 Map
将 list
的每个元素乘以 'v_mult'。
Map('*',mget(paste('v', seq(10, 100, by=10), sep="_")), list(v_mult))
或者使用 data.table
中的 set
,这会非常快,因为它没有 .[data.table
开销。
library(data.table)
DT <- setDT(mget(paste('v', seq(10, 100, by=10), sep="_")))
for(j in seq_along(DT)){
set(DT, i=NULL, j= j, value= DT[[j]]*v_mult)
}
这些向量应该都在一个矩阵中:
vlist <- mget(ls(pattern = "v_[[:digit:]*]"))
m <- do.call(cbind, vlist)
m * v_mult
# v_10 v_20 v_30 v_40 v_50 v_60 v_70 v_80 v_90
#[1,] 16 24 120 32 8 40 40 40 40
#[2,] 40 45 45 45 35 45 40 40 0
#[3,] 1 0 6 6 3 5 2 1 1
#[4,] 0 9 0 9 81 9 54 54 54
您当然可以使用列子集从矩阵中提取每个向量,例如 m[, "v_10"]
或 m[, 1]
。
我有 10 个向量(v_1 到 v_10),我需要将它们全部乘以另一个向量 v_mult(即 v_1*v_mult, v_2*v_mult 等)。如何在 for 循环中解决这个问题?我坚持使用循环解决方案(我没有找到),因为它是更大分析的一部分。
v_10<-c(2, 3, 5, 8)
v_20<-c(3, 9, 0, 1)
v_30<-c(15, 9, 6, 0)
v_40<-c(4, 9, 6, 1)
v_50<-c(1, 7, 3, 9)
v_60<-c(5, 9, 5, 1)
v_70<-c(5, 8, 2, 6)
v_80<-c(5, 8, 1, 6)
v_90<-c(5, 0, 1, 6)
v_10<-c(2, 8, 1, 0)
v_mult<-c(8, 5, 1, 9)
我们可以使用 mget
获取 list
中的所有向量对象,并使用 Map
将 list
的每个元素乘以 'v_mult'。
Map('*',mget(paste('v', seq(10, 100, by=10), sep="_")), list(v_mult))
或者使用 data.table
中的 set
,这会非常快,因为它没有 .[data.table
开销。
library(data.table)
DT <- setDT(mget(paste('v', seq(10, 100, by=10), sep="_")))
for(j in seq_along(DT)){
set(DT, i=NULL, j= j, value= DT[[j]]*v_mult)
}
这些向量应该都在一个矩阵中:
vlist <- mget(ls(pattern = "v_[[:digit:]*]"))
m <- do.call(cbind, vlist)
m * v_mult
# v_10 v_20 v_30 v_40 v_50 v_60 v_70 v_80 v_90
#[1,] 16 24 120 32 8 40 40 40 40
#[2,] 40 45 45 45 35 45 40 40 0
#[3,] 1 0 6 6 3 5 2 1 1
#[4,] 0 9 0 9 81 9 54 54 54
您当然可以使用列子集从矩阵中提取每个向量,例如 m[, "v_10"]
或 m[, 1]
。