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

时间:2017-02-22 01:47:32

标签: r

考虑一个假设的例子:

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列是否小于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函数吗?

2 个答案:

答案 0 :(得分:2)

我认为在R中做这类事情是相当标准的。需要考虑几点:

通常,您应该显式声明参数名称,以便在进行更改时不会创建任何不需要的行为。即,而不是sim(n, p),写sim(n = n, p = p)

要将simfun()缩减为k参数,需要np的默认值。有很多方法可以做到这一点。一种方法是在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)

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

答案 1 :(得分:0)

虽然不是很好,但您可以单独定义ostrina.glmmn

p

您可以在此处详细了解R环境:http://adv-r.had.co.nz/Environments.html