2013-04-12 55 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