2014-01-22 36 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

相关问题