有没有人有使用参考类作为因素水平的经验?这是我在我的一个data.frame
包中添加“类外键”支持的目标的一步。
我最终希望创建一个data.frame
可以将与因子关联的代码作为整数存储的方法,但该因子的级别实际上是参考类对象,而不是通常使用的字符向量因子。我已经能够找到一些关于使用 S4 对象作为因子级别的信息,但这些技术似乎不适用于参考类。
例如,一个简单的:
> myClass <- setRefClass("MyClass", fields=list(a="numeric", b="character"))
> myObj <- myClass$new(a=1, b="test")
> factor(myObj)
Error in unique.default(x) : unique() applies only to vectors
> as.character(myObj)
Error in as.vector(x, "character") :
cannot coerce type 'environment' to vector of type 'character'
> as.character.MyClass <- function(x){ x$b }
> as.character(myObj)
[1] "test"
> factor(myObj)
Error in unique.default(x) : unique() applies only to vectors
>
> unique.MyClass <- function (x, incomparables = FALSE, ...) { unique(as.character(x)) }
> factor(myObj)
Error in as.vector(x, mode) : invalid 'mode' argument
> traceback()
2: as.vector(exclude, typeof(x))
1: factor(myObj)
似乎没有任何工作。看起来,在我最好的情况下,我可以到达factor()
分析exclude
参数的行:
exclude <- as.vector(exclude, typeof(x))
此时一切都崩溃了,因为我不允许创建“S4”类型的向量。
任何关于如何解决这个问题的想法,或者 - 甚至更好 - 以data.frame
友好的方式将整数映射到引用类对象的替代方法将不胜感激!
编辑:针对@Aaron 的以下问题:
这里的简单解决方案是将整数存储在中data.frame
,然后维护一个单独的列表/data.frame
负责将这些 ID 映射到其他一些数据(例如引用类对象)。这将保留完成我需要的所有必要数据,但对我来说不太优雅,原因如下:
- 我正在设想一种解决方案,它允许我打印出引用类对象本身的某些部分,而不是 ID。例如,如果我将员工 ID(整数)映射到“员工”类,我希望
data.frame
打印员工的姓名,而不是他们的 ID。 - 我希望能够直接从
data.frame
. 以同样的方式,as.character(myDataFrame$someColumn)
这会给我该列的标签(假设它是一个因素),而不是实际存储在data.frame
.
同样,如果有更好的方法来解决这个问题,我非常愿意接受这个问题的替代解决方案!