我看到下面的代码在将列表转换为数据帧时起作用

do.call(rbind.data.frame, list(list(symbol = "ABC", name = "ABCVFD"), list(symbol = "XYZ", name = "Ni"), list(symbol = "GFD", name = NULL)))

Error in (function (..., deparse.level = 1, make.row.names = TRUE, stringsAsFactors = default.stringsAsFactors(),  : 
invalid list argument: all variables should have the same length

预期yields

      symbol   name
1     ABC      ABCVFD
2     XYZ      Ni
3     GFD      NULL

推荐答案

您可能希望安娜坐在最后一位,否则该列必然是列表列.要做到这一点,请定义一个函数,用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))

R相关问答推荐

以R为基数排列奇数个图

无法在我的情节中表现出显着的差异

如何在R中正确对齐放射状图中的文本

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

R Markdown中的交叉引用表

R:连接值,而不是变量?

如何根据组大小应用条件过滤?

通过使用str_detect对具有相似字符串的组进行分组

为什么在ggplot2中添加geom_text这么慢?

从BRM预测价值

使用R闪光显示所有数据点作为默认设置

从多个线性回归模型中提取系数

在R中,如何从一系列具有索引名的变量快速创建数据帧?

有没有办法定制Plot(allEffects())面板标题?

使用ggplot2中的sec_axis()调整次轴

自定义交互作用图的标签

在直方图中显示两个变量

为什么R列名称忽略具有指定名称的向量,而只关注索引?

对数据帧中的列进行子集设置以通过迭代创建新的数据帧

使用循环改进功能( struct 简单)