Pass arguments into function within a function
25,054
Try three dots instead of four, and add the ellipsis argument to the top level function:
myfunction <- function (dataframe, Colv = NA, ...) {
matrix <- as.matrix (dataframe)
out <- heatmap(matrix, Colv = Colv, ...)
return(out)
}
![jon](https://i.stack.imgur.com/rOXAw.jpg?s=256&g=1)
Comments
-
jon almost 2 years
I am writing function that involve other function from base R with a lot of arguments. For example (real function is much longer):
myfunction <- function (dataframe, Colv = NA) { matrix <- as.matrix (dataframe) out <- heatmap(matrix, Colv = Colv) return(out) } data(mtcars) myfunction (mtcars, Colv = NA)
The heatmap has many arguments that can be passed to:
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"), ...)
I want to use these arguments without listing them inside 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))
I tried the following but do not work:
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))
-
Carl Witthoft about 12 yearsJust to add an option (or add confusion), you can augment the contents of
...
by setting a variable inside your main functiondotfuns<-list(..., other_variable)
and passing that to subsequent functions. Do this at your own risk :-) -
jon about 12 years@CarlWitthoft sorry I could not get what you mean, could exand your solution (perhaps as answer )
-
Carl Witthoft about 12 yearsIt wasn't an answer to your specific problem, just a comment on other things that can be done with the
...
collection of arguments. -
Dimitrios Zacharatos over 4 yearsthis answer is very helpful, I wonder if there is a solution when you have 2 different functions with different names of arguments
-
Alf Pascu about 2 years@DimitriosZacharatos when you have 2 or more different functions within your function you can specify lists of arguments, have a look at G. Grothendieck answer to this question.