我有一个数据帧,dat,协变量站点被编码为31个不同级别的因子。
cas_1_sitea_586754968 0 0 1 2 0 sitea
con_65_sitea_568859302 1 0 2 1 1 siteb
cas_9_siteb_0799700 0 0 0 0 0 siteb
con_siteb_THR84569 2 0 0 1 0 sitea
我有一个函数,当我一次将它应用于一个站点变量时可以工作:
get_maf <- function(data){
allele.count <- apply(data[,1:(ncol(data)-2)],2,sum)
maf <- allele.count/(2*nrow(data))
out <- paste((unique(data$site)),"_jp.maf",sep="")
write.table(maf, out, col.names=F, quote=F)
}
但是,当我尝试使用这样的lapply遍历31个站点中的每个站点中的数据时:
lapply(unique(dat$site), get_maf, data = dat)
我收到错误:lapply(unique(jp$site), get_maf_jp, data = jp)
Error in FUN(c("aber", "ajsz", "asrb", "buls", "cati", "caws", "cims", :
unused argument (c("aber", "ajsz", "asrb", "buls", "cati", "caws", "cims", "clo3", "cou3", "denm", "dubl", "edin", "egcu", "ersw", "gras", "irwt", "lie2", "lie5", "mgs2", "msaf", "munc", "pewb", "pews", "s234", "swe1", "swe5", "swe6", "top8", "ucla", "umeb", "umes")[[1]])
非常感谢任何有关我在这里做错的见解。
答案 0 :(得分:1)
lapply(unique(dat$site), get_maf, data = dat)
表达式的问题在于它尝试将两个参数传递给get_maf
:第一个来自lapply
,第二个来自data=dat
。您可以像这样修复:lapply(unique(dat$site), function(s) {get_maf(data=dat[dat$site==s,]})
。
或者,您可以使用
library(dplyr)
dat %>% group_by(site) %>% get_maf
PS:如果您要处理大型数据集,请考虑在allele.count <- colSums(data[,1:(ncol(data)-2)])
函数中使用get_maf
,而不是使用现在慢得多的allele.count <- apply(data[,1:(ncol(data)-2)],2,sum)
。