2017-06-28 8 views
0

apply関数の実行進捗を追跡するためにインデックス番号を使用したいと思います。ここで私の試行は、動作しません(私たちは、インデックスを1.0で始まる関数を適用するたびに)。 applyのグローバル変数をどのように変更すればよいですか?R適用関数の変数値はどのように変更できますか?

> 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:3」を反復しているのであれば、それを直接使用しないでください。 – lmo

答えて

1

関数内の変数の代入が失われるのは、関数が終了するときです。 Zheyuan Liが正しく指摘したように、このように地球環境に割り当てることは、終了時に割り当てが失われないようにして行われます。

assign()関数を使用する方が、変数が格納されている場所を明示的に指定できます(必ずしも<<-であるとは限りません)。

idx=1 

f <- function(x){ 

    assign('idx', idx+1, envir = globalenv()) 
    print(c("current progress", idx)) 
    return(1) 

} 

res=sapply(1:3,f) 
関連する問題