将参数传递给函数内的函数

Posted

技术标签:

【中文标题】将参数传递给函数内的函数【英文标题】:Pass arguments into function within a function 【发布时间】:2012-06-19 19:17:49 【问题描述】:

我正在编写函数,该函数涉及来自基本 R 的其他函数,并带有很多参数。例如(实际函数要长得多):

myfunction <- function (dataframe, Colv = NA)  
matrix <- as.matrix (dataframe) 
out <- heatmap(matrix, Colv = Colv)
return(out)


data(mtcars)

myfunction (mtcars, Colv = NA)

热图有许多可以传递给的参数:

heatmap(x, Rowv=NULL, Colv=if(symm)"Rowv" else NULL,
        distfun = dist, hclustfun = hclust,
        reorderfun = function(d,w) reorder(d,w),
        add.expr, symm = FALSE, revC = identical(Colv, "Rowv"),
        scale=c("row", "column", "none"), na.rm = TRUE,
        margins = c(5, 5), ColSideColors, RowSideColors,
        cexRow = 0.2 + 1/log10(nr), cexCol = 0.2 + 1/log10(nc),
        labRow = NULL, labCol = NULL, main = NULL,
        xlab = NULL, ylab = NULL,
        keep.dendro = FALSE, verbose = getOption("verbose"), ...)

我想使用这些参数而不在 myfunction 中列出它们。

myfunction (mtcars, Colv = NA, col = topo.colors(16))
Error in myfunction(mtcars, Colv = NA, col = topo.colors(16)) : 
  unused argument(s) (col = topo.colors(16))

我尝试了以下方法但不起作用:

myfunction <- function (dataframe, Colv = NA)  
matrix <- as.matrix (dataframe) 
out <- heatmap(matrix, Colv = Colv, ....)
return(out)

data(mtcars)

myfunction (mtcars, Colv = NA, col = topo.colors(16))

【问题讨论】:

【参考方案1】:

尝试三个点而不是四个点,并将省略号参数添加到***函数:

myfunction <- function (dataframe, Colv = NA, ...)  
    matrix <- as.matrix (dataframe) 
    out <- heatmap(matrix, Colv = Colv, ...)
    return(out)

【讨论】:

只是为了添加一个选项(或添加混淆),您可以通过在主函数dotfuns&lt;-list(..., other_variable) 中设置一个变量并将其传递给后续函数来增加... 的内容。这样做需要您自担风险:-) @CarlWitthoft 抱歉,我无法理解您的意思,可以扩展您的解决方案(也许作为答案) 这不是针对您的具体问题的答案,只是对... 参数集合可以完成的其他事情的评论。 这个答案很有帮助,我想知道当你有2个不同的函数具有不同的参数名称时是否有解决方案

以上是关于将参数传递给函数内的函数的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:如何将多个参数传递给对象成员内的回调函数?

当我将参数传递给类构造函数时,是否需要其他名称相同或自已的函数可用?

将对象作为参数传递给函数

如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]

Excel VBA - 将参数参数传递给 Sub

使用 match.call 将所有参数传递给其他函数