我有一个列表,我想从中删除一个元素.我怎样才能做到这一点?
我已经尝试查找我认为这个功能的明显名称将在参考手册中,我没有找到任何合适的东西.
请考虑以下列表:
> l1 <- list(NULL,1,2,list(NULL,3,list(NULL,4)))
> str(l1)
List of 4
$ : NULL
$ : num 1
$ : num 2
$ :List of 3
..$ : NULL
..$ : num 3
..$ :List of 2
.. ..$ : NULL
.. ..$ : num 4
Run Code Online (Sandbox Code Playgroud)
要从NULL第一级删除值,只需调用即可
l1[vapply(l1,is.null,logical(1L))] <- NULL
Run Code Online (Sandbox Code Playgroud)
现在我想删除所有NULL级别的所有值,我想出了以下代码.
list.clean <- function(.data, fun = is.null, recursive = FALSE) {
if(recursive) {
.data <- lapply(.data, function(.item) {
if(is.list(.item)) list.clean(.item, fun, TRUE)
else .item
})
}
.data[vapply(.data,fun,logical(1L))] …Run Code Online (Sandbox Code Playgroud) 我正在使用的API需要我发送一条JSON消息,如:
y <- '[{"a":1, "b":"select", "c":["A", "B", "C"]},
{"a":2, "b":"text"},
{"a":3, "b":"select", "c":["D", "E", "F", "G"]}]'
Run Code Online (Sandbox Code Playgroud)
请注意,如果"b" : "select"有另一个变量c,其值为数组.
当我尝试运行fromJSON(y)(在jsonlite包中)时,我得到data.frame第3列是列表的位置:
> z <- fromJSON(y)
> class(z)
[1] "data.frame"
> z %>% glimpse()
Observations: 3
Variables: 3
$ a (int) 1, 2, 3
$ b (chr) "select", "text", "select"
$ c (list) A, B, C, NULL, D, E, F, G
Run Code Online (Sandbox Code Playgroud)
但是当我将其转换回JSON (这是我想发送给API的格式)时,c变量出现在它不应该的位置.
[{"a":1,"b":"select","c":["A","B","C"]},
{"a":2,"b":"text","c":{}},
{"a":3,"b":"select","c":["D","E","F","G"]}] …Run Code Online (Sandbox Code Playgroud)