【问题标题】:Sum up existing vectors and ignoring missing ones总结现有向量并忽略缺失的向量
【发布时间】:2018-09-01 00:40:42
【问题描述】:

我试图在一个函数中总结一些向量。根据我的输入,可能会创建或不创建一些向量。例如,我有向量 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

你知道一个简单的解决方案吗?

谢谢

【问题讨论】:

  • 是否可以为您的向量设置默认值并在需要时替换它们?说D &lt;- rep(0,4),因为您正在执行加法?
  • 是的,这很简单:if(!exists("D")){D

标签: r vector sum missing-data


【解决方案1】:

可能的替代方案(向量重命名):

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 = "+")))

【讨论】:

    【解决方案2】:

    注意:使用字母名称作为变量时要小心——D 是一个函数,stats::derivexists("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。用我们的“+”函数依次组合元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 2017-11-22
      • 1970-01-01
      • 2022-05-15
      相关资源
      最近更新 更多