2012-06-17 34 views
22

Piszę funkcję, która obejmuje inną funkcję z bazy R z wieloma argumentami. Na przykład (prawdziwa funkcja jest znacznie dłuższa):jak przekazywać argumenty do funkcji w funkcji r

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

data(mtcars) 

myfunction (mtcars, Colv = NA) 

termiczna ma wiele argumentów, które mogą być przekazywane do:

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"), ...) 

Chcę korzystać z tych argumentów nie wymieniając je wewnątrz 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)) 

Próbowałem następujących, ale nie działa:

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)) 

Odpowiedz

24

Spróbuj trzy kropki zamiast czterech, i dodać argument wielokropka na górę funkcją poziomu:

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

Wystarczy dodać opcja (lub dodaj zamieszanie), możesz zwiększyć zawartość '...', ustawiając zmienną w swojej głównej funkcji 'dotfuns <-list (..., other_variable)' i przekazując ją do kolejnych funkcji. Zrób to na własne ryzyko :-) –

+0

@CarlWitthoft przepraszam, nie mogłem dostać tego, co masz na myśli, może exand swoje rozwiązanie (być może jako odpowiedź) – jon

+0

To nie była odpowiedź na twój konkretny problem, tylko komentarz na temat innych rzeczy, które mogą zrobić z zbiorem argumentów "...". –

Powiązane problemy