如何循环列表列表并使用R(最好是高效)按名称访问行?

时间:2013-07-29 19:41:08

标签: r performance list dataframe

这可能是一个新手问题:

我有一个数组(我们称之为 a ),每个数组的每个元素都是这样的:

structure(list(rs6838241 = structure(list(Results = structure(c(-0.02015,
0.022242, -0.0111580707, 0.0028333, 0.01067,-2.01730, NA, 0.1704, 0.133291277489982,
0.6855, 0.32983, 0.4598227, 6.764345237e-05, 0.31353), .Dim = c(7L, 2L), 
.Dimnames = list(c("FVCpp_utah", "FEV1pp_utah",
"WallAreaPct_seg","Vida_15perc_Exp","pctEmph_Slicer", 
"FEV1_FVC_utah", "JointModel"), c("beta","pvalue"))), 
nobs = 1112L), .Names = c("Results", "nobs"))), .Names = "rs6838241")

我想找到p值最小的元素。

我做了类似的事情:

m <- 1000
for (i in 1:1000){
  m <- min(m, (a[i]$'Results')['JointModel','pvalue'])
}

但它没有做任何事情!我很困惑为什么我不能这样做:

> (a[1])$'Results'
  NULL

虽然这有效吗?

> a$'rs13125929'$'Results'
[SNIPPED]

为什么这个不起作用?

> s<-'rs13125929'
> (a[s])$'Results'
NULL

有没有找到没有循环的最低p值?

谢谢,

2 个答案:

答案 0 :(得分:1)

您可以使用:

min(sapply(a, function(x) x$Results['JointModel','pvalue']))

要查找具有最小pvalue的列表元素的索引,请使用which.min而不是min

答案 1 :(得分:0)

  1. 使用Reduce代替min的循环(另请参阅here
  2. 使用a[[1]]$'Results'(注意双括号)