我有一个 1000x1 的向量(1000 行和 1 列)。我想成对获取元素(第 1 行和第 2 行、第 3 行和第 4 行、第 5 行和第 6 行等)
这是我到目前为止所拥有的
for (j in 1: ncol(total_loci)){
for (i in 1: sample_size){
# a pair
genotype[i]<- paste(total_loci[i, j], total_loci[i+1,j], sep="")
}
}
因此,基因型应该是包含基因型的 500x1 向量(500 行和 1 列)。假设我的 for 循环是正确的。我认为我需要跳过所有其他索引 - 所以我的
i
应该从 1 开始,然后是 3、5、7、9 等。变量 total_loci
是类数据框。
最佳答案
您应该尽可能尝试使用矢量化解决方案。它们通常比循环更有内存效率和更快。
在这种情况下,您可以使用 seq
为每个其他元素生成一个索引向量。然后您可以使用该索引向量成对地对原始向量进行子集化。
# sample data
x <- replicate(5, sample(LETTERS, 1000, replace=TRUE), simplify=FALSE)
x <- as.data.frame(x, stringsAsFactors=FALSE)
names(x) <- paste("V",1:NCOL(x), sep="")
# function to concatenate every other observation as a pair
f <- function(x) {
s <- seq(2, length(x), 2)
paste(x[s-1], x[s], sep="")
}
# run algorithm for each column
y <- as.data.frame(lapply(x, f), stringsAsFactors=FALSE)
关于arrays - 如何成对循环遍历数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866418/