Вот подход с mget
и lapply
из базы R:
veclist <- mget(ls(pattern = "Vec[0-9]+"))
lapply(names(veclist),function(x){
ind <- as.integer(gsub(".*([0-9]+)","\\1",x))
result <- veclist[[x]]
toreplace <- which(result != 0)
result[toreplace] <- mat[seq_along(toreplace),ind]
result})
[[1]]
[1] 0.0 0.0 0.0 0.0 0.0 0.7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.7 0.0 0.0 0.0 0.0 0.0 0.0 2.7 3.7 0.0
[[2]]
[1] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 1.5 0.0 0.0 0.0 0.0 0.0 0.0 2.5 0.0 3.5
[[3]]
[1] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.4 0.0 0.0 1.4 0.0 0.0 0.0 2.4 3.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0
Пример данных
Vec1 <- c(0L, 0L, 0L, 0L, 0L, 20L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 20L, 0L,
0L, 0L, 0L, 0L, 0L, 20L, 120L, 0L)
Vec2 <- c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 20L, 0L, 0L, 0L, 0L, 0L, 20L, 0L,
0L, 0L, 0L, 0L, 0L, 20L, 0L, 120L)
Vec3 <- c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 20L, 0L, 0L, 20L, 0L, 0L, 0L, 20L,
120L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)