Предотвратите несписок для отбрасывания Нулевых значений

У меня есть вектор списков, и я использую unlist на них. Некоторые элементы в векторах NULL и unlist кажется, отбрасывает их.

Как я могу предотвратить это?

Вот является простое (не) рабочим примером, показывающим эту нежелательную функцию unlist

a = c(list("p1"=2, "p2"=5), 
      list("p1"=3, "p2"=4), 
      list("p1"=NULL, "p2"=NULL), 
      list("p1"=4, "p2"=5))
unlist(a)
 p1 p2 p1 p2 p1 p2 
 2  5  3  4  4  5 
51
задан zx8754 20 September 2017 в 03:56
поделиться

3 ответа

Проблема в том, что вы не можете иметь NULL в середине вектора. Например:

> c(1,NULL,3)
[1] 1 3

Вы можете иметь NA посередине. Вы можете преобразовать его в символьный, а затем обратно в числовой, который автоматически преобразует значения NULL в NA (с предупреждением):

> b <- as.numeric(as.character(a))
Warning message:
NAs introduced by coercion 

затем введите имена обратно, потому что они были отброшены предыдущей операцией:

> names(b) <- names(a)
> b
p1 p2 p1 p2 p1 p2 p1 p2 
2  5  3  4 NA NA  4  5 `
27
ответ дан 7 November 2019 в 10:19
поделиться

В этом случае (одноуровневый список глубины) это тоже должно работать:

a[sapply(a, is.null)] <- NA
unlist(a)
# p1 p2 p1 p2 p1 p2 p1 p2 
#  2  5  3  4 NA NA  4  5
36
ответ дан 7 November 2019 в 10:19
поделиться

Правильный способ указать отсутствующее значение - NA (not NULL). Вот другая версия, которая работает:

   a = c(list("p1"=2, "p2"=5),
      list("p1"=3, "p2"=4),
      list("p1"=NA, "p2"=NA),
      list("p1"=4, "p2"=5))
  unlist(a)

p1 p2 p1 p2 p1 p2 p1 p2 
 2  5  3  4 NA NA  4  5 
0
ответ дан 7 November 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: