所以我猜您正在专门查看 clhs.data.frame 包中的 clhs.data.frame 函数。从技术上讲,您可以更改函数的内部结构。以下是如何进行您请求的更改。只是为了确保您正在修改正确的行,请查看
body(clhs.data.frame)[[10]]
至少对我来说,这将电话返回给cor()。您可以使用
进行更改
body(clhs.data.frame)[[10]] <- quote(cor_mat <- cor(data.continuous, use="all.obs"))
那么您应该能够像以前一样使用该功能。但请注意,更改函数内部的行为方式可能会给依赖于特定行为的其他函数带来大问题。
一个更好的主意是创建一个具有不同名称的函数副本,您可以在需要时显式调用它,这样它就不会干扰其他任何事情。
为了展示它是如何工作的,我将创建一个简单的示例(因为clhs.data.frame 函数非常大). Let's say theff` 函数是由其他人定义的,我们需要在我们的数据上使用它
ff<-function(x) {
y <- x+2
y <- head(y,-1)
z <- sum(y)
return( z/2 )
}
ff(c(1,2,3,4,5)) #9
ff(c(1,NA,3,4,5)) #NA
哦,不。在向量中传递NA 会导致问题。如果他们在sum 中指定了na.rm=T,它就会起作用。那为什么不改呢
body(ff)[[4]]<-quote(z<-sum(y, na.rm=T))
ff(c(1,NA,3,4,5)) #7
请注意,当您调用body(ff) 时,您实际上会看到函数的主体。这实际上是一个您可以操作的列表。每个索引对应一个命令或代码块,body(ff)[[4]] 是具有sum 调用的代码行。所以我们只想把那行换成我们自己的版本(小心转义我们的表达式,这样它就不会被立即评估)。现在,当我们再次运行该函数时,我们得到了“改进”的行为。
我只是想让你知道,可以像这样更改函数(这让 R 非常酷),但它也可能导致许多副作用,所以你不这样做会更安全。