R 动态生成引用类

R 动态生成引用类,r,reference-class,R,Reference Class,我正在尝试动态地在R包中生成引用类,这被证明是相当困难的。以下是我采取的方法和遇到的问题: 我正在创建一个包,希望在其中能够动态读取模式并自动生成关联的引用类(想想SOAP)。当然,这意味着在提交包源代码之前,我将无法定义我的引用类 我最初尝试使用一个简单的 myClass <- setRefClass("NewClassName", fields=list(fieldA="character")) 当我试图构建包时,这实际上使R/Studio崩溃,因此我没有它生成的错误日志,不幸的是,

我正在尝试动态地在R包中生成引用类,这被证明是相当困难的。以下是我采取的方法和遇到的问题:

我正在创建一个包,希望在其中能够动态读取模式并自动生成关联的引用类(想想SOAP)。当然,这意味着在提交包源代码之前,我将无法定义我的引用类

我最初尝试使用一个简单的

myClass <- setRefClass("NewClassName", fields=list(fieldA="character"))
当我试图构建包时,这实际上使R/Studio崩溃,因此我没有它生成的错误日志,不幸的是,它肯定不起作用


接下来,我尝试在我的包中创建一个新环境,可以用来存储这些引用类。因此,我添加了一个
.classEnv来启动对话,我发现
getpackageName
将包名存储在指定环境中的一个隐藏的
.packageName
变量中

这样你就可以用它来回避警告了

assign(".packageName", "MyPkg", envir=.classEnv)    
myClass <- setRefClass("NewClassName", fields=classFields, where=.classEnv)

这消除了警告信息,并且不依赖任何记录为不稳定的内容。我仍然不清楚为什么需要它,但是…

?setRefClass
说参数
..
被传递到
?setClass
,这就有了参数
;你想用参数
package='yourpack'
或者别的什么来采取你的第三种方法吗?谢谢你的提示,马丁。不幸的是,这无法删除错误。如果尚未指定
.packageName
变量,则包名似乎不会一直向下延伸到
getPackageName
,这就是警告的来源。
myClass <- setRefClass("NewClassName", fields=list(fieldA="character"), where=.classEnv) 
> myClass <- setRefClass("NewClassName", where=.classEnv)
Warning message:
In getPackageName(where) :
  Created a package name, ‘2013-04-23 10:19:14’, when none found
assign(".packageName", "MyPkg", envir=.classEnv)    
myClass <- setRefClass("NewClassName", fields=classFields, where=.classEnv)
setPackageName("MyPkg", .classEnv)
myClass <- setRefClass("NewClassName", fields=classFields, where=.classEnv)