質問

私は複数回呼び出すRで関数を持っています。私はそれを呼ばれると、関数の内部で何をすべきかについて意思決定を行うためにそれを使用しました回数を追跡します。ここで私が今持っているものです。

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プログラミング言語で同様のことを行うことができますか?

役に立ちましたか?

解決

ここに1つの方法は、つまり、あなたの機能でアクセスを囲む環境にカウント変数を保存(プログラミング言語の意味での)閉鎖を使用しています:

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)

他のヒント

ここでは別のアプローチです。この1は少ないタイピングと(私の意見では)より読みやすくする必要があります:

f <- function(x) {
    y <- attr(f, "sum")
    if (is.null(y)) {
        y <- 0
    }
    y <- x + y
    attr(f, "sum") <<- y
    return(y)
}

コンセプトのこのスニペットだけでなく、より複雑な例はで見つけることができます<のhref =「http://www.r-bloggers.com/emulating-local-static-variables-in-r/」のrel =このR-ブロガーの記事での "noreferrer">

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top