我想编写/应用一个函数,该函数在数据集(美洲虎)上重复LD2
包中的pegas
函数,但是每次都更改'locus'参数的值。 'locus'参数接受长度为2的向量(例如c(1,2),c(2,3),c(77,78)等)。
例如,我希望代码先运行loci.pairs[[1]]
,然后运行loci.pairs[[2]]
,loci.pairs [[3]]等,然后将结果输出为列表。
我尝试使用lapply
,for循环和while循环执行此操作,但是遇到了错误(请参见下文):
library(adegenet)
library(pegas)
data("jaguar")
loci.pairs = combn(seq(1,ncol(jaguar)-1), 2, simplify = FALSE)
loci.pairs[[1]]
LD2(jaguar, locus=c(1,2), details=FALSE)
LD2(jaguar, locus=loci.pairs[[1]], details=FALSE)
LD2(jaguar, locus=loci.pairs[[2]], details=FALSE)
LD2(jaguar, locus=loci.pairs[[3]], details=FALSE)
LD2(jaguar, locus=loci.pairs[[4]], details=FALSE)
LD2(jaguar, locus=loci.pairs[[78]], details=FALSE)
lapply(jaguar, function(x) LD2(jaguar, locus=loci.pairs[[x]], details=FALSE))
loci.pairs [[x]]中的错误:递归索引在级别2失败
答案 0 :(得分:0)
lapply
函数具有不同的语法。试试这个:
lapply(loci.pairs, function(x) LD2(jaguar, locus=x, details=FALSE))
lapply
的第一个参数包含要迭代的列表。
由于要遍历组合,因此必须使用lapply(loci.pairs...)
而不是lapply(jaguar,...)
。
从本质上讲,对lapply
的此调用(就输出而言)等效于以下循环:
result_list = list()
for (i in 1:n) {
result_list[[i]] <- LD2(jaguar, locus=loci.pairs[[i]], details=FALSE)
}