在R

时间:2015-08-03 15:40:22

标签: r

我对OO编程比较陌生,希望对如何开发和使用我的类有一些建议。

目前,如果存在,我将所有类实例作为基础类结构的“继承”参数。例如,如果一个对象最初是类型列表我会做

class(x) <- c("my class", "list")
return(x)

我的逻辑是,这不会影响输出对象与依赖它作为 list 对象的其他包和基本函数的使用。这种做法是否“正确”(我没有CS背景)?是否有更好的方法来处理这些问题?

1 个答案:

答案 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"

以这种方式分配类很好,你只需要有意识地分配赋值顺序,并且知道你使用哪些函数有特定的方法。