【问题标题】: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 <- 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)]