我定义了一个类(`tdtfile`),它继承了 `data.frame`。现在我正在尝试定义一个 `[.data.frame` 相当的替代方法,以返回一个适当的 `tdtfile` 类对象,而不是 `data.frame`,但我遇到了麻烦。
这是我正在做的事情:
这将返回一个包含所有
谢谢你的帮助。
真诚地,Joh
这是我正在做的事情:
# 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]
这将返回一个包含所有
data.frame
列而不仅仅是第一个的tdtfile
对象...有人能发现我错过了什么吗?谢谢你的帮助。
真诚地,Joh