在尝试在清除列表上使用rbindlist之前,我试图用map()中的NA替换下面列表的NULL元素:
m = list(min = list(id = "min", val = NULL),
max = list(id = "max", val = 7),
split = list(id = "split", val = "gini"))
str(m)
List of 3
$ min :List of 2
..$ id : chr "min"
..$ val: NULL
$ max :List of 2
..$ id : chr "max"
..$ val: num 7
$ split:List of 2
..$ id : chr "split"
..$ val: chr "gini"
我尝试过:map(m, ~list_modify(.x, new = 8), .default = NA) %>% rbindlist
,但是我不确定.default = NA
为何不起作用。从文档的示例中,我猜测是因为.default = NA
在list_modify返回的列表的第一级检查NULL?将其放置在list_modify()
中也不起作用。有没有一种方法可以在不使用lapply的情况下用map管道内部的NA替换NULL?
答案 0 :(得分:0)
使用purrr::map_depth
,可以指定替换值的深度:
> m = list(min = list(id = "min", val = NULL),
> max = list(id = "max", val = 7),
> split = list(id = "split", val = "gini"))
> res <- purrr::map_depth(m, 2, ~ifelse(is.null(.x), NA, .x) )
> str(res)
List of 3
$ min :List of 2
..$ id : chr "min"
..$ val: logi NA
$ max :List of 2
..$ id : chr "max"
..$ val: num 7
$ split:List of 2
..$ id : chr "split"
..$ val: chr "gini"