我有以下列表:
my_list = list(list(NULL, '4'), NULL, 5)
str(my_list)
#> List of 3
#> $ :List of 2
#> ..$ : NULL
#> ..$ : chr "4"
#> $ : NULL
#> $ : num 5
我想学习如何用NA替换NULL元素。是否可以使用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
我想用rapply替换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
由reprex package(v0.3.0.9000)于2019-07-03创建
但是,我想知道是否有人可以阐明为什么rapply
无法正常工作吗?