将R函数多次应用于一个数据集,但每次更改一个参数的值

时间:2019-04-24 09:32:03

标签: r list lapply

我想编写/应用一个函数,该函数在数据集(美洲虎)上重复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]]

比较loci.pairs列表中的每对基因座

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失败

1 个答案:

答案 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)
}