如果您有一个文件列表,并且想要将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]
答案 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(测试和参考集)。