2012-06-17 41 views
22

引数の数が多い基底Rから他の関数​​を含む関数を記述しています。例えば、(実際の機能がはるかに長いです):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)) 

答えて

24

は、3個のドットの代わりに4を試してみて、そしてトップレベルの関数に省略記号引数を追加します。

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

だけ追加します(または混乱を加えて)、メイン関数 'dotfuns <-list(...、other_variable)'の中に変数を設定し、それを後続の関数に渡すことによって、 '...'の内容を補うことができます。あなた自身の責任でこれを行います:-) –

+0

@CarlWitthoft申し訳ありませんが、私はあなたが意味するものを得ることができませんでしたあなたの解決策(おそらく答えとして)exchすることができました – jon

+0

それはあなたの特定の問題への答えではありませんでした'...'引数の集合で行うべきです。 –

関連する問題