使用形式修改带有点的S3 Generics

时间:2016-11-29 13:19:19

标签: r

在我更好地理解R语言的过程中,我尝试修改基本函数,例如mean()sd()sum()以使用参数{{1}默认情况下。

我认为执行该方法的一种方法是使用formals()函数。

我试过了:

na.rm = TRUE

我认为由于S3方法调度,它不起作用。如何修改该代码使其返回14而不是NA?

我知道我可以用以下代码来实现:

m <- mean
formals(m) <- alist(x = , na.rm = TRUE, ... = )
m(c(12, 16, NA))

但它并不能满足我的好奇心。

1 个答案:

答案 0 :(得分:1)

有一些mean因此,例如,如果您要为mean覆盖numeric (它唯一的想法 - 可能还有其他方式)

1)找到所需的平均值

> methods(mean)
[1] mean.Date     mean.default  mean.difftime mean.IDate*   mean.POSIXct  mean.POSIXlt  mean.times*  
see '?methods' for accessing help and source code

2)覆盖

m=mean.default
formals(m) <- alist(x = , trim=0,na.rm = TRUE, ... = )

测试

> x=c(12, 16, NA)
> m(x)
[1] 14

或者可能更好的是创建一个更多的意思(使用新类),如

mean.myclass=mean.default
formals(mean.myclass) <- alist(x = , trim=0,na.rm = TRUE, ... = )

x=c(12, 16, NA)
class(x) <- append("myclass",class(x))
mean(x)
y=c(12, 16, NA)
mean(y)