gpt4 book ai didi

r - 将调用另一个函数的函数的参数

转载 作者:行者123 更新时间:2023-12-04 11:37:52 25 4
gpt4 key购买 nike

考虑一个假设的例子:

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功能并检查是否yz数据框的列小于值 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 参数,需要 np 的默认值.有很多方法可以做到这一点。一种方法是在 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)

第二个选项通常更可取,因为如果需要,您仍然可以更改 np

关于r - 将调用另一个函数的函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com