我想在R中对tis对象的列表进行子集化,但每当我尝试使用包含所有FALSE条目的逻辑向量进行子集时,我都会遇到错误。
例如,给定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(!或许)返回错误(FALSE):缺少值需要TRUE / FALSE“。例如,运行此行会导致该错误:
myTis %>% lapply(function(x) x[x[,1] < 7,])
值得注意的是,当我尝试使用单个tis对象执行类似操作时,我没有收到错误:
myTis[myTis[[1]][,1] > 10]
我也对使用tis对象完全不同的方式持开放态度。
答案 0 :(得分:1)
原因是在list
个元素之一中,逻辑向量全部为FALSE
。可能我们需要创建一个if/else
条件来返回原始tis
对象,或者可能是NA
(在代码中,我们指定.x
即原始对象)
library(purrr)
myTis %>%
map(~ if(!any(.x[,1]< 7)) .x else .x[.x[,1] < 7,])