考虑一个假设的例子:
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
列是否小于a价值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
函数吗?
答案 0 :(得分:2)
我认为在R中做这类事情是相当标准的。需要考虑几点:
通常,您应该显式声明参数名称,以便在进行更改时不会创建任何不需要的行为。即,而不是sim(n, p)
,写sim(n = n, p = p)
。
要将simfun()
缩减为k
参数,需要n
和p
的默认值。有很多方法可以做到这一点。一种方法是在simfun
内部进行硬编码。 E.g:
simfun <- function(k) {
dat <- sim(n = 100, p = c(.4, .6))
dat$threshold <- (dat$y<=k & dat$z<=k)
return(dat$threshold)
}
simfun(.5)
更灵活的方法是在函数声明中添加默认值。执行此操作时,最好将具有默认值AFTER变量的变量放在没有默认值的情况下。所以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
。
答案 1 :(得分:0)