在R程序中,列表长度是未知的。它是从for循环生成的。例如:
ls <- list()
ls[[1]] <- 5
ls[[3]] <- a
ls[[6]] <- 8
....
某些索引(序号(未定义。
我想转换成数据帧,如下所示:
1 5
2 NA
3 a
4 NA
5 NA
6 8
...
附加问题:如何获取该列表的序号范围?
基本的R方法可能是,假设环境中已经存在"ls":
解释:我们首先使用lapply迭代所有元素。在匿名函数部分,我们试图找到null值,只要找到null值就用NA替换。一旦列表null值被NA替换,我们就使用do.call中的"rbind"逐行绑定它们。要将最后一部分作为序列,我们可以使用seq函数或冒号运算符创建序列。
dfs <- data.frame(col1 = do.call('rbind', lapply(ls,
function(x)ifelse(is.null(x), NA, x))),
col2 = seq(1,length(ls)), stringsAsFactors = F)
备用使用unlist
(而不是do.call和rbind(:
dfs <- data.frame(col1 = unlist(lapply(ls,
function(x)ifelse(is.null(x), NA, x))), col2 =
seq(1,length(ls)), stringsAsFactors = F)
输出:
> dfs
# col1 col2
# 1 3 1
# 2 NA 2
# 3 6 3
# 4 NA 4
# 5 NA 5
# 6 8 6