1

如果你有一个文件列表,并且你想将 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"
}

最后对于 splitlist[1],

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

那么 splitlist[2] 也一样

4

1 回答 1

2

这是做你想做的吗?这里的关键点是遍历列表的索引,而不是名称,因为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(测试集和参考集)。

于 2012-05-27T17:32:08.323 回答