Хорошо, мне потребовалось некоторое время, чтобы создать фрагмент кода, который реплицирует мою проблему. Вот. Обратите внимание: если вы запустите команду new("FirstSet", id = "Input", multiplier = 2)
, вы получите правильный ответ. Однако, если вы попытаетесь создать класс, содержащий оба, вы получите следующее: Error in .local(.Object, ...) : argument "id" is missing, with no default
. Это буквально лучшее, что я могу сделать, чтобы объяснить/показать проблему.Создайте суперкласс класса S4 - с примером кода
В чем я ошибаюсь?
setClass("Details",
representation(
ID = "character",
Anumber = "numeric"))
Input <- new("Details",
ID = "Input",
Anumber = 2)
setClass("FirstSet",
representation(
Anothernumber = "numeric"))
setGeneric(
name = "FirstSet",
def = function(object){standardGeneric("FirstSet")}
)
setMethod("initialize",
signature(.Object = "FirstSet"),
function (.Object, id, multiplier)
{ x = [email protected]
y = x * multiplier
[email protected] = y
return(.Object)
}
)
setClass("Super", contains = c("Details", "FirstSet"))
Исправленный код дает новую ошибку. Я следовал инструкциям на этой должности и решил свою проблему. Я также создал общий и метод для «Супер», см. Код ниже. Теперь я получаю новую ошибку. Ошибка в .local (.Object, ...): попытка получить слот «Anumber» из объекта базового класса («символ») без слотов. Человек, это изматывает, я думал, что у меня это есть.
Целью подробностей является то, что будет много файлов, которые будут сериализованы, и методы будут вызваны в зависимости от характеристик данных в файле. Возможно ли это в R, или я пытаюсь сделать то, что R не может сделать?
Новый код
setClass("Details",
representation(
ID = "character",
Anumber = "numeric"))
setGeneric("Details",
def = function(object){standardGeneric("Details")})
setMethod("initialize",
signature(.Object = "Details"),
function(.Object, ID = character(), Anumber = numeric()){
[email protected] = ID
[email protected] = 2
return(.Object)
})
setClass("FirstSet",
representation(
Anothernumber = "numeric"))
setGeneric(
name = "FirstSet",
def = function(object){standardGeneric("FirstSet")}
)
setMethod("initialize",
signature(.Object = "FirstSet"),
function (.Object, id = character(), multiplier = numeric())
{ x = [email protected]
y = x * multiplier
[email protected] = y
return(.Object)
}
)
setClass("Super", contains = c("Details", "FirstSet"))
setGeneric("Super",
def = function(object){standardGeneric("Super")})
setMethod("initialize",
signature(.Object = "Super"),
function(.Object, id = character(), Anumber = numeric()){
Details <- new("Details", ID = id, Anumber = Anumber)
FirstSet <- new("FirstSet", Anothernumber = Anothernumber)
Super <- new("Super", Details, FirstSet)
return(.Object)
})
Я считаю, что детали следует рассматривать как ссылочный класс. Это верно? –