от
У меня есть вложенный список с некоторыми АН, и я хочу отбросить АН из списка.
purrr::discard
не работает рекурсивно:
l <

Выдает эту ошибку:


  Ошибка: функции предиката должны возвращать одиночное ИСТИНА или ЛОЖЬ, а не логический вектор длины 2


Я хотел бы закончить со следующим списком в этом случае:

l2 <

(мурлыканье версия: 0.3.2)
    

        

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

2 Ответы

0 голосов
от
is.na(c(T,T,T))
возвращает
c(F,F,F)
. Чтобы использовать discard, функция должна возвращать одно значение для каждого элемента списка, как предполагает ошибка. Это должно работать.
purrr::discard(l,function(x) all(is.na(x)))
Это будет работать, только если все элементы в индексе списка равны NA. Чтобы удалить все элементы
NA
, это должно сработать
library(tidyverse)
l
0 голосов
от
РЕДАКТИРОВАТЬ (другой вариант)
 purrr::discard(l,function(x) isTRUE(anyNA(x)))
$b
[1] TRUE

$c
[1] FALSE FALSE
Вы можете идентифицировать все элементы
NA
и
zap
их:
 purrr::list_modify(l,a=purrr::zap())
$b
[1] TRUE

$c
[1] FALSE FALSE
РЕДАКТИРОВАТЬ 2 Если вы хотите удалить все вложенные
NA
s, вы можете написать вспомогательный
zap_if()
:
 zap_if
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...