您可能希望安娜坐在最后一位,否则该列必然是列表列.要做到这一点,请定义一个函数,用NA替换NULL,然后交替运行rbindlist
,如果您不介意出现一条警告消息,只需运行rbindlist(L)
而不运行null2na
.L
是根据问题在结尾处的注释中定义的.
null2na <- function(x) {
if (is.list(x)) lapply(x, null2na)
else if (is.null(x)) NA
else x
}
library(data.table)
L |> null2na() |> rbindlist()
## symbol name
## 1: ABC ABCVFD
## 2: XYZ Ni
## 3: GFD <NA>
2) Base R或者,如果您首先从(1)开始运行null2na
,则问题中的代码可以工作:
do.call(rbind.data.frame, null2na(L))
## symbol name
## 1 ABC ABCVFD
## 2 XYZ Ni
## 3 GFD <NA>
3) recombinator第三种可能性是recombinator
在相同名称的包中.
library("recombinator")
recombinator(L)
## symbol name
## 1 ABC ABCVFD
## 2 XYZ Ni
## 3 GFD <NA>
如果我们先运行null2na
,也可以使用相同名称的包中的4) rrapply rrapply
.
library(rrapply)
rrapply(null2na(L), how = "bind")
## symbol name
## 1 ABC ABCVFD
## 2 XYZ Ni
## 3 GFD <NA>
实际上,rrapply
可以用来代替null2na
,这样rrapply的双重应用就可以工作了. 第一个应用程序替换null2na
,第二个应用程序将其转换为data.frame.
L |>
rrapply(classes = "NULL", f = \(x) NA, how = "replace") |>
rrapply(how = "bind")
## symbol name
## 1 ABC ABCVFD
## 2 XYZ Ni
## 3 GFD <NA>
同名包裹中的5) tibblify tibblify
可以做到这一点.
library(tibblify)
tibblify(L)
## # A tibble: 3 × 2
## symbol name
## <chr> <chr>
## 1 ABC ABCVFD
## 2 XYZ Ni
## 3 GFD <NA>
注意
L <- list(list(symbol = "ABC", name = "ABCVFD"),
list(symbol = "XYZ", name = "Ni"), list(symbol = "GFD", name = NULL))