Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用引用类在R中的父类中设置字段?_R_Reference Class - Fatal编程技术网

如何使用引用类在R中的父类中设置字段?

如何使用引用类在R中的父类中设置字段?,r,reference-class,R,Reference Class,我正在尝试设置params字段并在Template类中验证它,因此我可以执行TemplateClass$new(params)并自动验证,但我得到一个错误: Template <- setRefClass('Template', fields = c( "params" ), methods = list( initialize = function(params){ params <<- para

我正在尝试设置
params
字段并在Template类中验证它,因此我可以执行
TemplateClass$new(params)
并自动验证,但我得到一个错误:

Template <- setRefClass('Template',
    fields = c(
       "params"
    ),

    methods = list(
        initialize = function(params){
            params <<- params
            validate_params()
        },
        validate_params = function(){
            "everything okay"
        }
    )
)

PointsTemplate <- setRefClass('PointsTemplate',

    contains = "Template",

    methods = list(
        initialize = function(params){
            callSuper(params)
        }
    )
)

Error in .Object$initialize(...) :
  argument "params" is missing, with no default

Template我对R参考类没有任何经验,但在
参考类的帮助下,您可以阅读以下内容:

初始化方法在设计时需要谨慎,因为 他们为S4班做的。因此,您的方法通常应包括。。。作为 参数,所有其他参数应具有默认值或检查 missingness,并且您的方法应该通过 $callSuper()或$initFields(),如果您知道您的超类 没有初始化方法

所以我通过在父类中使用。。。并为所有具有默认值的字段命名参数

Template <- setRefClass('Template',
                        fields = list(params="list"),
                        methods = list(initialize = 
                            function(...,params=list(1:5)){
                              callSuper(...,params=params)
                              validate_params()
                            },
                          validate_params = function(){
                            "everything okay"
                          }
                        )
)

仅供参考,每个班级都有一个超级班级。如果没有显式指定,则是基“envRefClass”。很好的例子。为什么没有消息
“一切正常”
根据
validate_params
函数?@DanielKrizian也许我应该添加“消息(“一切正常”)`
PointsTemplate <- setRefClass('PointsTemplate',
                              contains = "Template",
                              methods = list(initialize = 
                                 function(...){
                                  callSuper(...)
                                }

                             ))
## using default values
> PointsTemplate$new()
Reference class object of class "PointsTemplate"
Field "params":
[[1]]
[1] 1 2 3 4 5
## setting params 
 PointsTemplate$new(params=list(1:10))
Reference class object of class "PointsTemplate"
Field "params":
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10