我想监控我的mapply函数的进度。数据由2个列表组成,有一个函数有2个参数。
如果我用一个参数为1的函数做类似的事情,我可以用ldply代替lapply。(我想用rbind.fill把输出转换成一个data.frame)
如果我想对mdply做同样的事情,它不能工作,因为mdply中的函数需要从数据框或数组的列中获取值,Mapply需要列表作为输入。
这些plyr apply函数非常方便,不仅因为我可以以data.frame的形式获得输出,还因为我可以使用进度条。
我知道有pbapply包,但是没有mapply版本,有txtProgressBar函数,但是我不知道如何在mapply中使用这个函数。
我尝试创建一个可重复的示例(运行大约需要30秒)
我猜这个例子很糟糕。我的l1是一个抓取的网站列表(rvest::read_html),我不能将其作为 Dataframe 发送到mdply。列表确实需要是列表。
mdply <- plyr::mdply
l1 <- as.list(rep("a", 2*10^6+1))
l2 <- as.list(rnorm(-10^6:10^6))
my_func <- function(x, y) {
ab <- paste(x, "b", sep = "_")
ab2 <- paste0(ab, exp(y), sep = "__")
return(ab2)
}
mapply(my_func, x = l1, y = l2)
完全不起作用
mdply(l1, l2, my_func, .progress='text')
Error in do.call(flat, c(args, list(...))) : 'what' must be a function or character string
2条答案
按热度按时间r1wp621o1#
从
?mdply
我敢说你不能指定两个数据输入。你的错误信息意味着mdply
试图使用l2
作为函数,但列表不能被强制为函数...以下方法可以正常工作
我想我现在明白你的目的了
请注意,我必须用一个新函数 Package 您的函数,该函数只考虑一个参数,并且使用该参数访问
l1
和l2
e4yzc0pl2#
回答我自己的问题。现在在pbapply中有一个名为
pbmapply
的函数,可以在mapply中添加进度条。