Я определил класс (tdtfile
), который наследует data.frame
. Теперь я пытаюсь определить метод эквивалентной замены , чтобы вернуть соответствующий объект класса tdtfile
, а не data.frame
, но у меня проблемы.Пользовательский класс, наследующий `data.frame` и метод замены
Вот что я делаю:
# Define Class
setClass("tdtfile",
representation(Comment = "character"),
prototype(Comment = NULL),
contains = c("data.frame"))
# Construct instance and populate
test <- new("tdtfile",Comment="Blabla")
df <- data.frame(A=seq(26),B=LETTERS)
for(sName in names(getSlots("data.frame"))){
slot(test,sName) <- slot(df,sName)
}
# "Normal" data.frame behavior (loss of slot "Comment")
str(test[1])
# Works as well - will be trying to use that below
`[.data.frame`(test,1)
# Try to change replacement method in order to preserve slot structure
# while accessing data.frame functionality
setMethod(
`[`,
signature=signature(x="tdtfile"),
function(x, ...){
# Save the original
storedtdt <- x
# Use the fact that x is a subclass to "data.frame"
tmpDF <- `[.data.frame`(x, ...)
# Reintegrate the results
if(inherits(x=tmpDF,what="data.frame")){
for(sName in names(getSlots("data.frame"))){
slot(storedtdt,sName) <- slot(tmpDF,sName)
}
return(storedtdt)
} else {
return(tmpDF)
}
})
# Method does not work - data.frame remains complete. WHY?
str(test[1])
# Cleanup
#removeMethod(
# `[`,
# signature=signature(x="tdtfile"))
Вызывая что-то вроде
tdtfile[1]
это возвращает аа tdtfile
объект со всеми содержащимися data.frame
столбцы, а не только первый ... может кто-нибудь то, что мне не хватает?
Благодарим за помощь.
С уважением, Джох
Hi Joh, добро пожаловать в SO. Не могли бы вы рассказать о своем последнем предложении. Что конкретно вы видите, и что бы вы хотели видеть вместо этого? –
Спасибо, что посмотрели на это. Я значительно пересмотрел пример, чтобы быть полностью автономным/воспроизводимым. Это то, что я пытаюсь сделать, и теперь ясно (er)? – balin