2013-04-12 57 views
0

我正在編寫一個調用Cpp程序的R程序包。R調用Cpp代碼:全局變量未重新初始化

我不是在R和.cpp的編程方面的專家,但我會盡力爲清楚地說明問題,因爲可能:

  • CPP的代碼創建一些全局變量的事後修改(我已知這是壞的...)。

  • 當我打開R並從我的包中運行一次我的R函數時,一切都很好。但是當我重新運行它時,似乎由Cpp代碼創建的全局變量不會重新初始化,而是使用修改的值代替。換句話說,似乎由Cpp創建的全局變量'保留在內存中',並且在我再次調用該程序時不會被重新編寫。

我希望我的問題很清楚,有人可以解釋我爲什麼這樣做。 預先感謝您。

+0

無論如何,如果你想讓它們爲每個函數調用重新初始化,你需要什麼全局變量? – krlmlr

回答

2

你其實做解釋,有些差強人意,但在本質上,你要明白,

  • 函數調用只是暫時的,不管涉及到C++,從R或不

  • 所以無論你設置將只會消失除非你說,返回一個值,或...

  • 如果你想保持「狀態」,創建一個合適的類,首先實例化它然後使用該對象進行呼叫。 Rcpp可以幫助R/C++接口。

+0

函數調用可能是臨時的,但OP引用*全局變量*,除非包含C++代碼的共享庫重新加載,否則將保留其值。 ? – krlmlr

+0

是的,但據我瞭解OP所說的,C++是從R調用的,並且只有有限的「調用函數,返回」接口。這當然可以用來啓動有狀態的事情,但這並不是默認情況下發生的。 –

+0

我認爲krlmlr重點說得好。我天真地從我的問題中瞭解到,共享庫中有一些全局變量,然後由R調用的C++函數進行修改。 – user2273432