2012-06-17 31 views
22

Tôi đang viết hàm liên quan đến hàm khác từ cơ sở R với nhiều đối số. Ví dụ (chức năng thực sự là lâu hơn nữa):cách chuyển đối số vào hàm trong một hàm trong r

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

data(mtcars) 

myfunction (mtcars, Colv = NA) 

Các Heatmap có nhiều lý lẽ có thể được chuyển tới:

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

Tôi muốn sử dụng những lập luận này mà không liệt kê chúng trong 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)) 

Tôi đã thử các sau đây nhưng không làm việc:

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

Trả lời

24

Hãy thử ba chấm thay vì bốn, và thêm đối số ellipsis để chức năng cấp cao nhất:

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

Chỉ cần thêm một tùy chọn (hoặc thêm nhầm lẫn), bạn có thể tăng thêm nội dung của '...' bằng cách thiết lập một biến bên trong hàm chính của bạn 'dotfuns <-list (..., other_variable)' và chuyển nó tới các hàm tiếp theo. Làm điều này có nguy cơ của riêng bạn :-) –

+0

@CarlWitthoft xin lỗi tôi không thể có được những gì bạn có ý nghĩa, có thể giải pháp của bạn (có lẽ là câu trả lời) – jon

+0

Đó không phải là câu trả lời cho vấn đề cụ thể của bạn được thực hiện với bộ sưu tập các đối số '...'. –

Các vấn đề liên quan