我有多个相同长度的矢量命名为:
c1
c2
c3
.
.
cn
有没有办法制作单个载体" c"得到c1到cn的所有元素的总和,即
c = c1+c2+c3+c4..........cn
答案 0 :(得分:0)
您可以使用ls()
列出全局环境中的所有变量,并通过pattern
参数限制其输出。然后使用mget
获取这些变量的值,并使用rbind
绑定列表的值,并使用rowSums
函数获取行总和。
# create sample vectors
c1 <- c(1, 2)
c2 <- c(2, 4)
c3 <- c(3, 2)
c30 <- c(1, 30)
c_vars <- ls(pattern = "c[0-9]", name = .GlobalEnv ) # to get values for name argument, try search()
c_vars
# [1] "c1" "c2" "c3" "c30"
n <- 2 # specify the value of n
c_vars <- c_vars[c_vars %in% paste("c", 1:n, sep = '')] # subset only the variables matching from 1:n
c_vars
# [1] "c1" "c2"
获得每个所选矢量之和的两种方法。
# 1. It will work only when all vectors are of same length
rowSums(do.call("rbind", mget( c_vars ) ))
# c1 c2
# 3 6
# 2. It will work regardless of length of vectors.
unlist(lapply(mget(c_vars), sum))
# c1 c2
# 3 6