如何将未知变量传递给R中的另一个函数

How to pass unknown variables to another function in R

我正在编写一个函数,它使用一些输入数据生成热图,但事先执行一些转换。为了生成实际的热图,我使用了 ComplexHeatmap::Heatmap,它提供了多种选项来修改热图。我想让用户有机会通过我的函数直接指定 ComplexHeatmap::Heatmap 的参数。

现在我正在使用如下所示的东西:

library(ComplexHeatmap)

mat = matrix(rnorm(100), 10)
rownames(mat) = paste0("R", 1:10)
colnames(mat) = paste0("C", 1:10)


test_fun <- function(mat, ...){
  args = list(...)
  print(args)
  p <- ComplexHeatmap::Heatmap(mat,
               show_row_names = args$show_row_names)
  return(p)
}



test_fun(mat, show_row_names=F)

这很好用,但假设用户想要更改 ComplexHeatmap::Heatmapshow_column_names 参数。这会导致错误,因为我没有明确定义 args$show_column_names。对于 ComplexHeatmap::Heatmap 提供的每个参数手动执行此操作似乎非常乏味,我想知道是否有更优雅的方法来执行此操作。理想情况下,我最终想要的是,ComplexHeatmap::Heatmap 将使用其默认参数,但如果 he/she 在 test_fun 函数中指定它们,用户可以“覆盖”它们。

我认为这样的事情可能会奏效,但不幸的是它没有。


test_fun <- function(mat, ...){
  args = list(...)
  print(args)
  p <- ComplexHeatmap::Heatmap(mat, ...)
  return(p)
}



test_fun(mat, show_row_names=F, show_column_names=F)

非常感谢任何帮助!

我不是特别熟悉这个包,但是你只是想:

test_fun <- function(mat, ...){
ComplexHeatmap::Heatmap(mat,...)
}

您似乎这样做了,例如,我们可以通过调用 test_fun 来删除列名和 row_names:

test_fun(mat, show_row_names=FALSE, show_column_names = FALSE)

省略号或...允许我们在 test_fun 函数中放置任意数量的 'arguments recognised by the ComplexHeatmap::Heatmap function'。