【问题标题】:How do I modify a dependent function in r?如何修改 r 中的依赖函数?
【发布时间】:2014-05-08 07:51:00
【问题描述】:

我正在使用函数 clhs,它调用函数 cor。我想更改clhs 用于cor 的默认设置。

clhscor 具有以下默认设置

cor(data_continuous, use = "complete.obs")

我想在使用clhs时更改cor to (data.continuous, use="all.obs")

有谁知道该怎么做?

【问题讨论】:

  • 我认为这是在您未提及的其他包中。所有代码都已提供给您,您只需创建一个新函数,例如 my_clhs,您只需在其中更改那一行。可能有一种方法可以将该参数直接传递给 clhs,但这种方法也很简单(前提是 clhs 不依赖包中的其他函数,那么您必须稍微调整一下)

标签: r function dependencies


【解决方案1】:

所以我猜您正在专门查看 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 非常酷),但它也可能导致许多副作用,所以你不这样做会更安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2011-07-10
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多