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

标签 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数据框的列小于值 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/

相关文章:

R max 函数忽略不适用

R Shiny - 将用户输入(文本和上传的图像)作为参数传递以生成报告

R:保留 1 行/列矩阵

R:将具有未知列类的 data.frame 中的字符转换为数字

r - 在 R 控制台中编辑或查看数据框

r - 在多个预测变量上循环 Cox 回归模型

r - 考虑到每个东西运行了多长时间;计算一段时间内运行的事物总数?

r - dplyr::manip:如何使用字符串参数(保存列名)而不是列名

r - 赋值运算符的函数形式是什么,[<-?

r - 保存输入 Shiny 的状态