У меня есть следующий список:
my_list = list(list(NULL, '4'), NULL, 5)
str(my_list)
#> List of 3
#> $ :List of 2
#> ..$ : NULL
#> ..$ : chr "4"
#> $ : NULL
#> $ : num 5
Я хотел бы узнать, как заменить элементы NULL на NA.Можно ли сделать это, используя rapply
?Вот моя попытка:
my_list = list(list(NULL, '4'), NULL, 5)
rapply(my_list, function(x) NA, how = "replace", classes = 'NULL')
#> [[1]]
#> [[1]][[1]]
#> NULL
#>
#> [[1]][[2]]
#> [1] "4"
#>
#>
#> [[2]]
#> NULL
#>
#> [[3]]
#> [1] 5
Я бы очень хотел заменить NULL
элементов, поэтому я указал classes = 'NULL'
и how = 'replace'
.Но, как вы можете видеть в выводе выше, элементы NULL
не заменяются.
Я могу добиться желаемого результата, рекурсивно применяя purrr::modify
следующим образом:
library(purrr)
my_list = list(list(NULL, '4', list('y', NULL)), NULL, 5)
str(my_list)
#> List of 3
#> $ :List of 3
#> ..$ : NULL
#> ..$ : chr "4"
#> ..$ :List of 2
#> .. ..$ : chr "y"
#> .. ..$ : NULL
#> $ : NULL
#> $ : num 5
replaceNULL <- function(x) {
modify_if(x, is.list, replaceNULL, .else = ~ifelse(is.null(.), NA, .))
}
replaceNULL(my_list)
#> [[1]]
#> [[1]][[1]]
#> [1] NA
#>
#> [[1]][[2]]
#> [1] "4"
#>
#> [[1]][[3]]
#> [[1]][[3]][[1]]
#> [1] "y"
#>
#> [[1]][[3]][[2]]
#> [1] NA
#>
#>
#>
#> [[2]]
#> [1] NA
#>
#> [[3]]
#> [1] 5
Создано в 2019-07-03 пакетом Представить (v0.3.0.9000)
Однако мне было интересно, может ли кто-нибудь пролить свет на то, почему rapply
не работает?