R refClass方法

时间:2014-01-06 11:28:08

标签: r object

我正在使用下面的R refClass示例。

Person =  setRefClass("Person",fields = list(name = "character", age  = "numeric")
            ) ## Person = setRefClass("Person",


Person$methods = list(
              increaseAge <- function(howMuch){
                age = age + howMuch
              }
          )

当我将此程序存储在名为Person.R的文件中并将其源代码时,它不会显示任何错误。现在我实例化一个新对象。

p = new("Person",name="sachin",age=40)

我尝试使用p$increaseAge(40)调用方法increaseAge,它显示以下错误

Error in envRefInferField(x, what, getClass(class(x)), selfEnv) :
  "increaseAge" is not a valid field or method name for reference class "Person"

我无法弄清楚为什么当我定义它时方法increaseAge不是有效的方法名称。

2 个答案:

答案 0 :(得分:2)

要指定独立于类定义的方法,请在生成器上调用methods() 函数。另外,使用<<-.self$age =进行分配。

Person$methods(increaseAge=function(howMuch) {
    age <<- age + howMuch
    ## alterenatively, .self$age = age + howMuch or .self$age <- age + howMuch
})

请记住,R在向量上效果最好,因此请考虑代表研究中所有个体的Persons类(建模),而不是Person的集合实例(建模行)。

答案 1 :(得分:0)

使用您的代码时出错。我会做这样的事情:

Person =  setRefClass("Person",
                      fields = list(name = "character", age  = "numeric"),
                      methods = list(
                        increaseAge = function(howMuch) age <<- age + howMuch
                      ))

> p = new("Person",name="sachin",age=40)
> p$increaseAge(5)
> p$age
[1] 45