【问题标题】:How do I subset a list in R by selecting all elements in a list except for one value?如何通过选择列表中除一个值之外的所有元素来对 R 中的列表进行子集化?
【发布时间】:2013-07-05 21:28:12
【问题描述】:

所以基本上我有一个名为“参数”的列表,其中包含值(x1、x2、...、xj)。我想通过 for 循环对该列表进行子集化,但每次都省略一个元素。因此,例如,我希望第一个子集(通过 for 循环的第一次迭代)是(x2,x3,...,xj),下一个是(x1,x3,...,xj)等等on,直到最后一个子集是 (x1, x2, ... , xj-1)。我该怎么做?

【问题讨论】:

    标签: r list object vector subset


    【解决方案1】:

    我假设“列表”是指vector。如果是这样:

    parameters <- rnorm(100)
    y <- matrix(nrow=length(parameters)-1,ncol=length(parameters))
    for(i in 1:length(parameters))
        y[,i] <- parameters[-i]
    

    如果“列表”,实际上是指list,代码基本相同,但先做parameters &lt;- unlist(parameters)

    【讨论】:

      【解决方案2】:

      这可能很有用

      > Vector <- paste("x", 1:6, sep="")
      > lapply(1:length(Vector), function(i) Vector[-i])
      

      【讨论】:

        【解决方案3】:

        以防万一您想将数据用于留一式折刀,这里有一个指向 bootstrap 包的快速指针和一个简短示例

        library(bootstrap)
        vec_list=list()
        jackknife(rnorm(10,0,1),function(x) {vec_list[[length(vec_list)+1]]<<-x;mean(x)})
        vec_list[1:10]
        

        【讨论】:

          【解决方案4】:

          您可以通过指示它们在列表中的顺序来从列表中子集元素。

          从列表中选择项目 1 和 3

          my.list[c(1,3))]
          

          试试这个:

          # create a dummy list of data frames
          d1 <- data.frame(y1=c(1,2,3),y2=c(4,5,6))
          d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4))
          d3 <- data.frame(y1=c(3,2,1),y2=c(9,8,7))
          my.list <- list(d1, d2, d3)
          
          # get the items 1 and 3
          my.list[c(1,3)]
          
          # get the all element except of the first one
          my.list[c(-1)]
          

          【讨论】:

            猜你喜欢
            • 2019-02-21
            • 2019-11-22
            • 2017-04-19
            • 2021-04-30
            • 2021-12-14
            • 2014-09-21
            • 1970-01-01
            • 1970-01-01
            • 2018-06-16
            相关资源
            最近更新 更多