【问题标题】:Making a vector from list elements in R从R中的列表元素制作一个向量
【发布时间】:2012-12-06 21:49:42
【问题描述】:

我有一个我用 R 编写的函数的引导统计列表列表。主列表有 1000 次引导迭代。列表中的每个元素本身就是一个包含三项内容的列表,包括四个变量中每一个的拟合值(“fvboot”——一个 501x4 矩阵)。

我想为 x 值网格上的每个位置创建一个值向量,从 1:501 开始,对于每个变量,从 1:4 开始。

例如,对于第 j 个变量的 xgrid 上的第 i 个点,我想制作一个如下所示的向量:

        vec = bootfits$fvboot[[1:1000]][i,j]

但是当我这样做时,我得到:

recursive indexing failed at level 2

谷歌搜索,我想我明白为什么 R 会这样做。但我没有得到关于如何将每个 fvboot 矩阵的第 ij 个元素转换为 1000x1 向量的答案。

我们将不胜感激。

【问题讨论】:

  • 什么是length(bootfits)?如果是 3,那么您的第一段完全是误导性的。如果是1000,那么你就不能做bootfits$fvboot

标签: r list


【解决方案1】:

在 R 中使用 unlist() 函数。来自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)))

【讨论】:

    【解决方案2】:

    您可以使用 sapply 一次提取一个向量,例如对于 i=1 和 j=1:

    i <- 1
    j <- 1
    vec <- sapply(bootfits, function(x){x$fvboot[i,j]})
    

    sapply 对列表 bootfits 的每个元素执行函数(在本例中是我们编写的内联函数),并尽可能简化结果(即将其从列表转换为向量)。

    要将整组值提取为矩阵(例如,在所有 i 上),您可以将其包装在另一个 sapply 中,但这次在 i 上用于指定 j:

    j <- 1
    mymatrix <- sapply(1:501, function(i){
        sapply(bootfits, function(x){x$fvboot[i,j]})
    })
    

    警告:我尚未测试此代码,但我认为它应该可以工作。

    【讨论】:

      【解决方案3】:

      如果你给出一个最小的示例对象,这会更容易。一般来说,你不能用像[[1:1000]] 这样的向量来索引列表。我会使用plyr 函数。这应该可以(虽然我还没有测试过):

      require("plyr")
      laply(bootfits$fvboot,function(l) l[i,j])
      

      如果你不熟悉plyr:我一直觉得Hadley Wickham 的文章'The split-apply-combine strategy for data analysis'很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 2014-06-15
        相关资源
        最近更新 更多