akrunと同様、xが空でない場合に備えてelse-branchを返す必要がありますコードが常に空になります。それ以外の場合は、データに常に特定の列がある場合は、適切な空のdata.frameも準備します。これは、表記法で列を準備することによって使用されるコードです。数値(0)、文字(0)、整数(0)などがあります。あなたの空data.framesが一貫している場合
emptyframe = data.frame(num = numeric(0), name = character(0))
a = emptyframe
b = data.frame(num = 1:2, name = paste("ID", 1:2))
c = data.frame(num = 6:8, name = paste("ID", 6:8))
d = emptyframe
x = list(a, b, c, d)
combined = lapply(x, function(x){
if(is.data.frame(x) && nrow(x)==0){
# Creating an empty data frame you'd preferably want to know before-hand what kind of variables you will have
emptyframe
}else{ # I would also cast it data.frame before returning, as it may have just failed cause of is.data.frame == FALSE
as.data.frame(x)
}
})
combined
#> combined
#[[1]]
#[1] num name
#<0 rows> (or 0-length row.names)
#
#[[2]]
# num name
#1 1 ID 1
#2 2 ID 2
#
#[[3]]
# num name
#1 6 ID 6
#2 7 ID 7
#3 8 ID 8
#
#[[4]]
#[1] num name
#<0 rows> (or 0-length row.names)
、あなたはその後、彼らは規則的であると考えられているとして、上記の手法を用いてdata.framesで行うことができますきちんとしたものがたくさんあります。例えば、一つの大きなdata.frameに行結合それらを考慮:あなたはまた、複数のdata.framesがある場合は、 `else`は「x」を返すために持っている必要があり
do.call("rbind", combined)
#> do.call("rbind", combined)
# num name
#1 1 ID 1
#2 2 ID 2
#3 6 ID 6
#4 7 ID 7
#5 8 ID 8
、それを維持する方が良いです'リスト' – akrun