我对OO编程比较陌生,希望对如何开发和使用我的类有一些建议。
目前,如果存在,我将所有类实例作为基础类结构的“继承”参数。例如,如果一个对象最初是类型列表我会做
class(x) <- c("my class", "list")
return(x)
我的逻辑是,这不会影响输出对象与依赖它作为 list 对象的其他包和基本函数的使用。这种做法是否“正确”(我没有CS背景)?是否有更好的方法来处理这些问题?
答案 0 :(得分:2)
这样做是没有错的,只要这是你的预期行为; 尽可能将x
视为my_class
,仅当list
的特定方法不可用时才my_class
。
希望这个例子能说明:
df1 = df = data.frame(ID = 1:5, Value = rnorm(5))
class(df) <- c(class(df), "my_class")
class(df1) = rev(class(df))
x = letters[1:5]
class(x) <- "my_class"
为my_class
定义一种特定的摘要方法:
summary.my_class <- function(x) print(names(x))
看看会发生什么:
> summary(df)
ID Value
Min. :1 Min. :-2.980
1st Qu.:2 1st Qu.:-1.697
Median :3 Median :-1.478
Mean :3 Mean :-1.118
3rd Qu.:4 3rd Qu.:-1.306
Max. :5 Max. : 1.873
> summary(df1)
[1] "ID" "Value"
> summary(x)
[1] "a" "b" "c" "d" "e"
以这种方式分配类很好,你只需要有意识地分配赋值顺序,并且知道你使用哪些函数有特定的方法。