考虑一个假设的例子:
sim <- function(n,p){
x <- rbinom(n,1,p)
y <- (x==0) * rnorm(n)
z <- (x==1) * rnorm(n,5,2)
dat <- data.frame(x, y, z)
return(dat)
}
现在我想写另一个函数simfun
我将在上面调用 sim
功能并检查是否y
和 z
数据框的列小于值 k
.
simfun <- function(n, p, k){
dat <- sim(n, p)
dat$threshold <- (dat$y<=k & dat$z<=k)
return(dat$threshold)
}
但是使用 sim
的参数是标准的吗?作为 simfun
的参数?我可以写 simfun <- function(k)
并调用 sim
内部功能simfun
?
最佳答案
我想说在 R 中做这种事情是相当标准的。有几点需要考虑:
通常您应该显式声明参数名称,以免在进行更改时产生任何不需要的行为。即,代替 sim(n, p)
,编写 sim(n = n, p = p)
。
要将 simfun()
简化为一个 k
参数,需要 n
和 p
的默认值.有很多方法可以做到这一点。一种方法是在 simfun
本身内部进行硬编码。例如:
simfun <- function(k) {
dat <- sim(n = 100, p = c(.4, .6))
dat$threshold <- (dat$y<=k & dat$z<=k)
return(dat$threshold)
}
simfun(.5)
更灵活的方法是在函数声明中添加默认值。执行此操作时,最好将具有默认值的变量放在没有默认值的变量之后。所以 k
会排在第一位,如下所示:
simfun <- function(k, n = 100, p = c(.4, .6)){
dat <- sim(n, p)
dat$threshold <- (dat$y<=k & dat$z<=k)
return(dat$threshold)
}
simfun(.5)
第二个选项通常更可取,因为如果需要,您仍然可以更改 n
或 p
。
关于r - 将调用另一个函数的函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381246/