rbind - R 如何在不丢失 character(0)的情况下绑定行?

  显示原文与译文双语对照的内容

我有一个像L这样的列表(来自矢量分裂)。


L <- strsplit(c("1 5 9","","3 7 11",""),"")



# [[1]]


# [1]"1""5""9"


# 


# [[2]]


# character(0)


# 


# [[3]]


# [1]"3""7""11"


# 


# [[4]]


# character(0)



当我执行普通的rbind 时,我丢失了所有 character(0) 行。


do.call(rbind, L)


# [,1] [,2] [,3]


# [1,]"1""5""9" 


# [2,]"3""7""11"



我是否总是要像下面这样做 lapply,或者我错过了一些东西?


do.call(rbind, lapply(L, function(x) 


 if (length(x) == 0) rep("", 3) else x))


# [,1] [,2] [,3]


# [1,]"1""5""9" 


# [2,]"""""" 


# [3,]"3""7""11"


# [4,]"""""" 



基本 R 答案优先。

时间:

如果你使用 lapply,你不必担心长度,这样你就可以跳过 rep 部分,从而自动回收。


do.call(rbind, lapply(L, function(x) if (length(x) == 0)"" else x))



# [,1] [,2] [,3]


#[1,]"1""5""9" 


#[2,]"""""" 


#[3,]"3""7""11"


#[4,]"""""" 



使用与 @NelsonGon 相同的逻辑的另一个选项我们可以用空格替换空列表,然后使用 rbind


L[lengths(L) == 0] <-""


do.call(rbind, L)



# [,1] [,2] [,3]


#[1,]"1""5""9" 


#[2,]"""""" 


#[3,]"3""7""11"


#[4,]"""""" 



...