将一个列表项与R中的其余项进行比较

时间:2012-05-26 16:19:27

标签: r loops

如果您有一个文件列表,并且想要将1与其他文件进行比较,那么您是如何做到的?

my.test <- list[1]
my.reference.set <- list[-1]

这当然有效,但是我希望在循环中使用它,每次my.test变化(这样列表中的每个文件都是my.test一次迭代,即我有250个文件的列表,并且我想为其中的12个文件的每个子集执行此操作。

> num <- (1:2)
> sdasd<- c("asds", "ksad", "nasd", "ksasd", "nadsd", "kasdih")
> splitlist<- split(sdasd, num)
> splitlist
$`1`
[1] "asds"  "nasd"  "nadsd"

$`2`
[1] "ksad"   "ksasd"  "kasdih"

> for (i in splitlist) {my.test <- splitlist[i] # "asds"
+ my.reference.set <- splitlist[-i] # "nasd" and "nadsd"
+ combined <- data.frame (my.test, my.reference.set)
+ combined}
Error in -i : invalid argument to unary operator
> 

然后我希望下一次迭代,

my.test <- splitlist[i] #my.test to be "nasd"
my.reference.set <- splitlist[-i] # "asds" and "nadsd"
}

最后是拆分列表[1],

my.test <- splitlist[i] # "nadsd" 
my.reference.set <- splitlist[-i] # "asds" and "ksad"
}

然后对于拆分列表[2]

1 个答案:

答案 0 :(得分:2)

这样做你想要的吗?这里的关键点是循环遍历列表的 indices 而不是名称,因为x[-n]索引仅在n是自然数时有效(有一些模糊的例外) )。此外,我不确定您是否希望将结果作为数据框或列表 - 后者允许组件的长度不同。

num <- 1:2
sdasd <- c("asds", "ksad", "nasd", "ksasd", "nadsd", "kasdih")
splitlist<- split(sdasd, num)
L <- vector("list",length(splitlist))
for (i in seq_along(splitlist)) {
    my.test <- splitlist[[i]] # "asds"
    my.reference.set <- splitlist[-i] # "nasd" and "nadsd"
    L[[i]] <- list(test=my.test, ref.set=my.reference.set)
}

编辑:我仍然对上面的示例感到困惑,但我认为这就是你想要的:

refs <- lapply(splitlist,
     function(S) {
         lapply(seq_along(S),
            function(i) {
               list(test=S[i], ref.set=S[-i])
           })
     })

refs是一个嵌套列表;顶级长度为2(长度为splitlist),每个下一级别的长度为3(splitslist元素的长度),每个底层的长度为2(测试和参考集)。