这是一个建议,但我不确定它的效率如何。
首先,我使用lapply 而不是for 循环来创建您的列表。
my_list<- lapply(df, function(x) fitDist(x, type = "realAll"))
然后我修改你的函数,通过大量的字符串操作,这样我们就可以得到想要的结果。主要思想是从my_list中提取相关信息,即分布和参数,然后用该信息创建一个字符串,最后执行。
colname<- function(p, my_list){
functions<- sapply(my_list, function(x) names(x$fits[1]))
inputs<- lapply(my_list, function(x) x$parameters)
parameters<- lapply(seq_along(1:length(inputs)), function(x) my_list[[x]][inputs[[x]]]))
arguments<- lapply(parameters, function(x) paste0(names(x), "=", x))
name<- sapply(seq_along(1:length(functions)), function(x) paste0("q", functions[x], "(", paste(p, paste(arguments[[x]], collapse=","), sep=","),")", sep=""))
colname<- sapply(name, function(x) eval(parse(text = x)))
}
我确信有办法让它更快,所以任何 cmets 都会非常感激。此外,鉴于您没有提供任何可重现的示例,我不能 100% 确定它会按照您希望的方式工作。
让我知道它是否有效!