我从R中写的一个函数中得到了一个bootstrap统计列表列表.主列表有1000个bootstrap迭代.列表中的每个元素本身都是三个列表的列表,包括四个变量中每个变量的拟合值("fvboot" - 501x4矩阵).
我想为x值的网格上的每个位置创建一个值的向量,从1:501开始,对于每个变量,从1:4开始.
例如,对于第j个变量的xgrid上的第i个点,我想制作如下的向量:
vec = bootfits$fvboot[[1:1000]][i,j]
Run Code Online (Sandbox Code Playgroud)
但当我这样做时,我得到:
recursive indexing failed at level 2
Run Code Online (Sandbox Code Playgroud)
谷歌搜索,我想我明白为什么R这样做.但是我没有得到如何将每个fvboot矩阵的ijth元素转换为1000x1向量的答案.
帮助将不胜感激.
小智 6
使用不公开()函数R.从example(unlist),
unlist(options())
unlist(options(), use.names = FALSE)
l.ex <- list(a = list(1:5, LETTERS[1:5]), b = "Z", c = NA)
unlist(l.ex, recursive = FALSE)
unlist(l.ex, recursive = TRUE)
l1 <- list(a = "a", b = 2, c = pi+2i)
unlist(l1) # a character vector
l2 <- list(a = "a", b = as.name("b"), c = pi+2i)
unlist(l2) # remains a list
ll <- list(as.name("sinc"), quote( a + b ), 1:10, letters, expression(1+x))
utils::str(ll)
for(x in ll)
stopifnot(identical(x, unlist(x)))
Run Code Online (Sandbox Code Playgroud)
如果您提供一个最小的示例对象,这会更容易。一般来说,您不能使用像 之类的向量来索引列表[[1:1000]]。我会使用这些plyr功能。这应该可以做到(虽然我还没有测试过):
require("plyr")
laply(bootfits$fvboot,function(l) l[i,j])
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉plyr:我总是发现 Hadley Wickham 的文章“数据分析的拆分-应用-组合策略”非常有用。