我试图的R包在飞行中产生的参考类,它的证明是相当困难的。 下面是我碰到的,我采用的方法和问题:
我创建一个包中,我希望能够在一个模式中动态读取并自动生成相关的参考类(认为SOAP)。 当然,这意味着我将无法前手来定义包的来源我引用类。
我最初尝试使用简单的创建一个新的类:
myClass <- setRefClass("NewClassName", fields=list(fieldA="character"))
其中,当然,当交互执行,但包中包含的源时,我得到一个正常工作locked binding
错误。 从我的阅读,它看起来像发生这种情况是因为交互方式运行时,该班级的信息被存储在全球环境中,这是不锁定,而我的包的基础环境已被锁定。
后来我发现使用的东西的效果提出了一个主题:
myClass <- setRefClass("NewClassName", fields=list(fieldA="character"), where=globalenv())
这实际上坠毁R / Studio时,我试图建立的包,所以我没有记录它产生的,不幸的是错误的,但它肯定没有奏效。
接下来,我尝试创建我的包,我可以用它来存储这些引用类中的一个新的环境。 所以我增加了一个.classEnv <- new.env()
:我的包中源(不是内部的任何功能的)线,然后尝试创建一个新的参考类时使用这个类
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
因此,出于某种原因, methods::getPackageName()
是不能够拿起我的新环境是哪个包?
有没有一种方法来创建不同的我的新的环境,让getPackageName()
可以正确识别包? 我可以添加一些功能,让我帮getPackageName()
检测的包? 这是否会甚至工作,如果我能处理的警告,还是我试图通过动态地创建他们滥用引用类?