2014-01-22 35 views
0

您好我正在嘗試使用適用於矩陣我稱爲eq;我喜歡做的是發送一個函數,我用多個參數。目前,我這樣做時,它的工作原理:使用應用函數發送多個參數

apply(eq, 1, manydo2) 

manydo2 <-function(x){ # do something with the vector x } 
然而

,當我嘗試這樣的事情

apply(list("x1"=eq, "r1" = 18), 1, manydo2) 

失敗了,反正是有,我可以通過該行的數據,以及其他一些變量說R1在這個案例?多謝。

+1

你想在這裏做什麼?你想要矩陣的子集還是你想傳遞其他參數到eq? –

+0

對陣列,矩陣或數據框使用'apply'。使用'lapply'作爲列表:'lapply(list(「x1」= eq,「r1」= 18),manydo2)''。 – lukeA

+0

@JohnPaul很抱歉抽象。我試圖將eq的一個子集傳遞給函數manydo2,但是有多個參數。 – Ahdee

回答

3

假設你想傳遞的行,那就是每一行的同一個參數:

manydo3 <- function(x, r1) NULL 
apply(eq, 1, manydo3, r1=18) 

如果您想爲每一行的第二個參數不同的值,那麼你要分割你矩陣爲行和同時通過行和您的其它參數與mapply

mapply(manydo3, split(eq, row(eq)), R) 

其中length(R) == nrow(eq)(即R含有R1,R2等)。

+1

這個,再加上如果你喜歡,你可以使用子集'eq',比如'apply(eq [eq $ colx == x1,],1,manydo,r1 = 18)'。如果你看'apply',你會看到它有一個'...'參數,這意味着你可以添加其他參數,它們將被髮送到你在'apply'中調用的函數。 –

+0

嗨BrodieG和約翰,這是完美的作品;我最終使用了'apply(eq [1:5,1:17],1,manydo2,r1 = 18)',它很有用,所以非常感謝! – Ahdee

相關問題