如何使函数成为自定义函数的参数?

How to make a function an argument for a custom made function?

提问人:Samuel Priestley 提问时间:7/16/2023 更新时间:7/16/2023 访问量:58

问:

我创建了一个函数,用于在具有统计显著性的值旁边添加显著性星号。我之所以创建这个函数,是因为我正在为不同的测试统计量创建表。我想用这段代码做的是在自定义函数中创建一个参数,该参数将更改正在使用的测试统计信息。例如,我可能希望使用 fisher 精确检验而不是二项式检验,因此我想输入 test_star_loop(data=data, test = fisher.test) 来执行 Fisher 检验。有没有一种简单的方法可以在不使用 if 和 else 语句的情况下做到这一点?

这是我写的代码。它创建了我想要的二项式检验的星星,但我不确定如何制作它,以便我可以将其应用于不同的测试统计量。

test_star_loop <- function(data){
  # convert table to dataframe
  data <- do.call(rbind.data.frame, data)

  # vector to store stars for each column in
  stars <- rep("", ncol(data))
  # iteratre over each column
  for (col in seq_along(data)) {
  # do binomial test on top row

  # number of times subjects avoid =ed information
  n_success <- round((data[1, col]/100)*data[2, col], 0)
  
  binom_result <- binom.test(x = n_success, n = data[2, col], p = 0)
  # check if p-value < 0.01
  if (binom_result$p.value < 0.01) {
      stars[col] <- "***"
    }
  # check if p-value  < 0.05
  else if (binom_result$p.value < 0.05) {
      stars[col] <- "**"
    }
  }
r 假设检验

评论

3赞 r2evans 7/16/2023
当然:如果你的形式参数包括 ,那么在函数中,你可以调用 ,而不是调用 。在函数内部, .你的问题不在于用作测试的函数(因为它是一个函数),而是你如何在内部使用它,以及用户可能提供的每个测试是否使用相同的参数(并且用于相同的目的)。test=fisher.testfisher.test(x, alternative="greater")test(x, alternative="greater")testfisher.testtest
0赞 Liang Zhang 7/16/2023
如果您只是添加星星,我建议使用 {rstatix} 包。查看此页面,它可以帮助您为您的统计数据添加星星。
0赞 I_O 7/16/2023
aside:是vector("character", n)rep("", n)
0赞 Samuel Priestley 7/20/2023
感谢您@r2evans回复。有没有办法做到这一点,以便可以调整函数的参数。我之所以提到这一点,是因为二项式检验的参数与 fisher 精确检验的参数不同。

答: 暂无答案