Это вопрос из двух частей.Я хочу установить значение объекта-прототипа s4 на основе другого значения слотов, и в качестве альтернативы я хочу реализовать это как метод.
У меня есть объект, который я пытаюсь создать.У него есть несколько слотов.Я хотел бы установить значение слотов на основе значений, вставленных из другого слота.Это упрощенная версия того, что я хочу сделать.
, т. Е.
setClass("Person",
representation(name = "character", age = "numeric", doubleAge = "numeric"),
prototype(name = "Bob", age = 5, doubleAge = 10) )
Теперь я хочу создать объект, но само значение doubleAge устанавливается на основе слота возраста.
p1 <- new("Person", name = "Alice", age = 6)
Я вижу
An object of class "Person"
Slot "name":
[1] "Alice"
Slot "age":
[1] 6
Slot "doubleAge":
[1] 10
, но я хочу, чтобы doubleAge было 12. В прототипе я не знаю, как изменить doubleAge = 10
на что-то вроде doubleAge = 2*age
Поэтому в качестве решения я попытался создать функцию настройки init
, которая устанавливает значение после создания.Это вопрос части 2.
setGeneric("init", "Person", function(object) {
standardGeneric("init")
}
setMethod("init","Person", function(object) {
object@doubleAge <- object@age*2
object
}
, если я печатаю object@doubleAge
в методе, он возвращает 12, но кажется, что область действия заканчивается, потому что это 10, когда он возвращает
В настоящее время чтоработает очень похоже, но это не правильно.
setGeneric("init<-", "Person", function(object) {
standardGeneric("init<-")
}
setMethod("init<-","Person", function(object) {
object@doubleAge <- object@age*2
object
}
, но тогда я должен назвать как init(p1) <- NULL
, что просто кажется странным.Я знаю, что этот пример кажется тривиальным, но это всего лишь простой пример более сложной проблемы реального мира.