使用R的向量加法

时间:2017-02-09 02:58:20

标签: r

我有多个相同长度的矢量命名为:

c1
c2
c3
.
.
cn

有没有办法制作单个载体" c"得到c1到cn的所有元素的总和,即

c = c1+c2+c3+c4..........cn

1 个答案:

答案 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