在我更好地理解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))
但它并不能满足我的好奇心。
答案 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)