代码之家  ›  专栏  ›  技术社区  ›  wtrs

R-用逻辑向量子集tis对象列表

  •  1
  • wtrs  · 技术社区  · 7 年前

    我想在R中子集一个tis对象列表,但每当我试图用一个包含所有假条目的逻辑向量子集时,就会遇到错误。

    例如,给定tis对象myTis:

    library(tis)
    myTis <- list(cbind(tis(1:10,    start = c(2000, 1), freq = 12), 
                        tis(101:110, start = c(2000, 1), freq = 12)),
                  cbind(tis(7:12,    start = c(2000, 1), freq = 12), 
                        tis(107:112, start = c(2000, 1), freq = 12)))
    

    如果我想找到myTis中所有元素的所有行,其中第一列大于11,这很容易做到:

    myTis %>% lapply(function(x) x[x[,1] < 11,])
    

    但是,当我尝试将其子集为排除其中一个tis对象的所有元素的某个值时,我得到以下错误: if(!maybe)return(FALSE)中出错:缺少需要TRUE/FALSE的值 . 例如,运行此行会导致该错误:

    myTis %>% lapply(function(x) x[x[,1] < 7,])
    

    值得注意的是,当我尝试对单个tis对象执行类似操作时,我没有发现错误:

    myTis[myTis[[1]][,1] > 10]
    

    我也愿意用完全不同的方法来处理tis对象。

    1 回复  |  直到 7 年前
        1
  •  1
  •   akrun    7 年前

    原因可能是 list 元素逻辑向量为全部 FALSE . 也许我们需要创建一个 if/else 返回原件的条件 tis 对象,或者 NA (在规范中,我们规定 .x i、 e.原始对象)

    library(purrr)
    myTis %>% 
        map(~  if(!any(.x[,1]< 7)) .x else .x[.x[,1] < 7,])