我正在尝试使用我在R中编写的函数同时制作一堆图,以便一次制作一个图。我的函数调用多个参数,包括一个FUN参数,该参数指定每个样本应该使用哪个绘图函数。
我想将一个表/数据框读入R,然后在每一行上运行相同的函数,其中每一行指定该运行的参数。
我的功能如下:
printTiff <- function(FUN, sample, start, end) {
tiff(paste(sample,".tiff", sep=""), compression="lzw",width=892,height=495)
g <- FUN(sample,start,end)
dev.off()
}
我有一个包含FUN,sample,start和end列的表,其中每一行应该以不同的tiff结束。我尝试过使用do.call,但我似乎无法正确使用它。我有几百个样本,所以我想避免每次运行都改变参数。
表格样本:
FUN sample start end
1 T7Plots sample343 27520508 27599746
2 C9Plots sample347 27522870 27565523
3 C9Plots sample345 27535342 27570585
答案 0 :(得分:3)
使用mapply
:
mapply(printTiff, table[,1], table[,2], table[,3] ,table[,4])
答案 1 :(得分:2)
您可以使用match.fun
按名称查找功能,然后就可以使用它。
printTiff <- function(FUN, sample, start, end) {
FUN <- match.fun(FUN)
paste(sample, FUN(start), end);
}
table <- read.table(header=TRUE, stringsAsFactors=FALSE, text="
FUN sample start end
T7Plots sample343 27520508 27599746
C9Plots sample347 27522870 27565523
C9Plots sample345 27535342 27570585
")
T7Plots <- `-`
C9Plots <- function(x) 1/x
然后我们可以像@alexis_laz一样使用mapply
mapply(printTiff, table[,1], table[,2], table[,3] ,table[,4])