首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >R中的静态变量

R中的静态变量
EN

Stack Overflow用户
提问于 2009-07-06 18:48:46
回答 3查看 8.1K关注 0票数 19

我在R中有一个函数,我多次调用它。我想要跟踪我调用它的次数,并使用它来决定在函数中做什么。这就是我现在所拥有的:

代码语言:javascript
复制
f = function( x ) {
   count <<- count + 1
   return( mean(x) )
}

count = 1
numbers = rnorm( n = 100, mean = 0, sd = 1 )
for ( x in seq(1,100) ) {
   mean = f( numbers )
   print( count )
}

我不喜欢在函数的作用域之外声明变量count。在C或C++中,我可以只做一个静态变量。我可以在R编程语言中做类似的事情吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-06 19:25:31

以下是使用闭包(在编程语言中)的一种方法,即将count变量存储在只能由您的函数访问的封闭环境中:

代码语言:javascript
复制
make.f <- function() {
    count <- 0
    f <- function(x) {
        count <<- count + 1
        return( list(mean=mean(x), count=count) )
    }
    return( f )
}

f1 <- make.f()
result <- f1(1:10)
print(result$count, result$mean)
result <- f1(1:10)
print(result$count, result$mean)

f2 <- make.f()
result <- f2(1:10)
print(result$count, result$mean)
result <- f2(1:10)
print(result$count, result$mean)
票数 30
EN

Stack Overflow用户

发布于 2013-01-15 01:02:26

这是另一种方法。这个需要更少的输入,(在我看来)更具可读性:

代码语言:javascript
复制
f <- function(x) {
    y <- attr(f, "sum")
    if (is.null(y)) {
        y <- 0
    }
    y <- x + y
    attr(f, "sum") <<- y
    return(y)
}

这段代码以及更复杂的概念示例可以在in this R-Bloggers article中找到

票数 5
EN

Stack Overflow用户

发布于 2021-07-07 23:02:42

G.Grothendieck似乎给出了正确的答案:Emulating static variable within R functions,但不知何故,这篇文章在谷歌搜索中获得了更有利的位置,所以我把答案复制到了这里:

在本地函数中定义f,如下所示:

代码语言:javascript
复制
f <- local({ 
  static <- 0
  function() { static <<- static + 1; static }
})
f()
## [1] 1
f()
## [1] 2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1088639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档