我正在使用下面的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不是有效的方法名称。
答案 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