我试图在函数中总结一些向量。根据我的输入,可能会创建一些向量。例如,我有向量A,B,C和D:
A <- c(1,1,1,0)
B <- c(1,0,1,1)
C <- c(0,0,0,1)
在这种情况下,D不存在。
如果向量存在,我需要编写一个代码来汇总值,并忽略不存在的向量。
输出应为A + B + C + D,忽略缺少的向量:
> A + B +C
[1] 2 1 2 2
您知道一个简单的解决方案吗?
谢谢
答案 0 :(得分:0)
注意:小心使用字母名称作为变量 - D
是一个函数stats::deriv
,而exists("D")
很可能会在您的环境中返回TRUE
。
我认为您使用exists
:
vA <- c(1,1,1,0)
vB <- c(1,0,1,1)
vC <- c(0,0,0,1)
vec.names <- c("vA", "vB", "vC", "vD")
Reduce("+", mget(Filter(exists, vec.names)))
# [1] 2 1 2 2
说明:从名称的字符向量开始。将该向量过滤到存在的那些对象。返回找到的mget
对象的命名列表。将这些元素与我们的&#34; +&#34;相继结合起来。功能
答案 1 :(得分:0)
可能的替代方案(重命名的矢量):
AA <- c(1,1,1,0)
BB <- c(1,0,1,1)
CC <- c(0,0,0,1)
eval(parse(text = paste(intersect(ls(), c("AA", "BB", "CC", "DD")), collapse = "+")))