作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我喜欢在运行缓慢的for
循环时使用进度条。使用几个助手可以轻松完成此操作,但我确实喜欢tcltk软件包中的tkProgressBar
。
一个小例子:
pb <- tkProgressBar(title = "Working hard:", min = 0, max = length(urls), width = 300)
for (i in 1:300) {
# DO SOMETHING
Sys.sleep(0.5)
setTkProgressBar(pb, i, label=paste( round(i/length(urls)*100, 0), "% ready!"))
}
close(pb)
forp
的.Rprofile中(如:带有Progressbar的for循环),以类似于
for
的方式进行调用,但带有自动添加的进度条-但不幸的是,不知道如何实现并获取循环功能的
expr
部分。我用
do.call
做过一些实验,但没有成功:(
for
循环,但会创建一个
TkProgressBar
并在每次迭代中自动对其进行更新):
forp (i in 1:10) {
#do something
}
foo(bar)
),而且还可以处理在右括号后指定的
expr
,例如:< cc>。
foo(bar) expr
循环的语法那样工作的所有答案。例如。代替
> forp(1:1000, {
+ a<-i
+ })
> a
[1] 1000
> forp(1:1000) {
+ a<-i
+ }
> a
[1] 1000
for
部分?恐怕这是不可能的,但是会给职业玩家几天的赏金:)
最佳答案
考虑到提供的其他答案,我怀疑很难完全按照您指定的方式进行操作。
但是,我相信,如果您创造性地使用plyr
包,有一种非常接近的方法。诀窍是使用l_ply
将列表作为输入而不创建任何输出。
该解决方案与您的规范之间的唯一真正区别是,您可以在for
循环中直接在同一环境中修改变量。使用l_ply
您需要发送一个函数,因此如果要在父环境中修改内容,则必须更加小心。
尝试以下方法:
library(plyr)
forp <- function(i, .fun){
l_ply(i, .fun, .progress="tk")
}
a <- 0
forp(1:100, function(i){
Sys.sleep(0.01)
a<<-a+i
})
print(a)
[1] 5050
a
的值。
.fun
始终是具有单个参数的函数,例如
.fun=function(i){...}
。
for(i in 1:10){expr}
等效于
forp(1:10, function(i){expr})
i
是循环的循环参数
.fun
是具有单个参数的函数
i
关于function - 包装到带有进度条的FOR循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349570/
我是一名优秀的程序员,十分优秀!