我使用Rcpp使用cppFunction创建了一个函数mygrpc。当我在启动R会话后调用该函数时,出现以下错误:
> mygrpc(xmc1,ygix,ygrpc)
Error in .Call(<pointer: (nil)>, x, ygix, ygrpc) :
NULL value passed as symbol address
xmc1是股票的OHLC数据矩阵,而ygix和ygrpc是作用于股票每日增量的函数。
但是当我在Rcpp中使用cppFunction再次重写函数并运行它时,它正在执行。甚至该函数也会显示在ls()函数的输出中。
我认为在R控制台中完成会话后,该功能无法正确存储。
知道如何正确存储函数,以便我可以在R函数中再次使用它而无需一次又一次地重写ygrpc吗?如果没有正确存储ygrpc,为什么它会显示在ls()函数的输出中?
非常感谢您花时间和精力......
答案 0 :(得分:2)
R控制台不存储任何内容。可以指示R本身在退出时存储当前工作空间,但这通常是一个坏主意(如果使用的话,还是should be disabled in RStudio)。
但是这个工作区图像不能存储某些东西,比如共享对象(编译C ++代码就是这样)。因此,您无法在R会话中保留cppFunction
的结果。每次脚本运行时都需要重新运行该函数。或者,正如Dirk建议的那样,您将代码放入包中并编译而不是依赖cppFunction
。