从R中的data.frames列表中提取非空元素
我有一个名为从R中的data.frames列表中提取非空元素,r,list,loops,dataframe,lapply,R,List,Loops,Dataframe,Lapply,我有一个名为G的数据帧列表 在BASE R中,我想知道如何在A和B中分别提取元素dint和SD,跳过任何NULL元素 我想要的输出是:dint=list(A=1:3,B=c(1:4,5:6)) SD=列表(A=0:2,B=c(2:5,3:4)) 以下是数据: G <- list(A = list(short = NULL, short2 = NULL, del1 = data.frame(dint = 1:3, SD = 0:2), del11 = NULL
G
的数据帧列表
在BASE R中,我想知道如何在A
和B
中分别提取元素dint
和SD
,跳过任何NULL
元素
我想要的输出是:dint=list(A=1:3,B=c(1:4,5:6))
SD=列表(A=0:2,B=c(2:5,3:4))
以下是数据:
G <- list(A = list(short = NULL, short2 = NULL, del1 = data.frame(dint = 1:3, SD = 0:2),
del11 = NULL),
B = list(short = data.frame(dint = 1:4, SD = 2:5), short2 = NULL, del1 =
data.frame(dint = 5:6, SD = 3:4), del11 = NULL))
G我们可以使用嵌套的lappy
lapply(G, function(x) unlist(lapply(x, `[[`, 'dint'), use.names = FALSE))
#$A
#[1] 1 2 3
#$B
#[1] 1 2 3 4 5 6
对于“SD”
也类似
lapply(G, function(x) unlist(lapply(x, `[[`, 'SD'), use.names = FALSE))
#$A
#[1] 0 1 2
#$B
#[1] 2 3 4 5 3 4
我们可以只调用一个lappy
并提取组件
lapply(G, function(x) do.call(rbind, x)$dint)
#$A
#[1] 1 2 3
#$B
#[1] 1 2 3 4 5 6
或提取“SD”
lapply(G, function(x) do.call(rbind, x)$SD)
#$A
#[1] 0 1 2
#$B
#[1] 2 3 4 5 3 4
它可以被做成一个函数
f1 <- function(lstI, elementName){
lapply(lstI, function(x) do.call(rbind, x)[[elementName]])
}
f1(G, "dint")
f1(G, "SD")
@然后,您可以使用Filter(否定(is.null)),lappy(G,…
lapply(G, function(x) do.call(rbind, x))