如何在R apply函数中更改变量值?

时间:2017-06-28 09:00:41

标签: r apply

我想使用索引号来跟踪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"  

1 个答案:

答案 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)