R - подмножество этого списка объектов с логическим вектором

Я хочу создать подмножество списка объектов tis в R, но сталкиваюсь с ошибкой всякий раз, когда пытаюсь создать подмножество с логическим вектором, содержащим все записи FALSE.

Например, для данного объекта 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 (! возможно) return(FALSE): отсутствует значение, где TRUE/FALSE нужно”. Например, эта ошибка возникает в результате выполнения этой строки:

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

Следует отметить, что я не получаю ошибку, когда пытаюсь сделать что-то подобное с одним объектом tis:

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

Я также открыт для совершенно разных способов сделать это с этими объектами.


person wtrs    schedule 24.01.2018    source источник


Ответы (1)


Причина может заключаться в том, что в одном из элементов list логический вектор равен FALSE. Может быть, нам нужно создать условие if/else, чтобы вернуть исходный объект tis в этом случае, или может быть NA (в коде мы указали .x, т.е. исходный объект)

library(purrr)
myTis %>% 
    map(~  if(!any(.x[,1]< 7)) .x else .x[.x[,1] < 7,])
person akrun    schedule 24.01.2018
comment
Хорошо, это подтверждает мое подозрение, что это связано с ошибкой в ​​пакете tis, которую можно избежать только с помощью инструкции if, подобной той, которую вы предоставили. Спасибо. - person wtrs; 24.01.2018