我想使用索引号来跟踪apply
函数中的执行进度。这是我的尝试,它不起作用(每次我们应用函数索引从1.0开始)。我该如何解决这个问题,即在apply
函数中更改全局变量?
> idx=1
> f<-function(x){
+ idx=idx+1
+ print(c("current progress", idx))
+ return(1)
+ }
> res=sapply(1:3,f)
[1] "current progress" "2"
[1] "current progress" "2"
[1] "current progress" "2"
答案 0 :(得分:1)
这是因为函数终止时函数内的变量赋值会丢失。正如李哲元正确地指出的那样,分配到全球环境可以解决这个问题,因为这种分配在终止时不会丢失。
我更喜欢使用assign()
函数,因为您可以明确地确定变量的存储位置(<<-
的情况并非总是如此)。
idx=1
f <- function(x){
assign('idx', idx+1, envir = globalenv())
print(c("current progress", idx))
return(1)
}
res=sapply(1:3,f)