如何在多个变量上使用lapply?

时间:2015-05-07 21:30:05

标签: r performance for-loop apply lapply

我试图通过使用lapply而不是for循环在lapply函数中提供函数变量来加速我的代码我在lapply函数中提供了所有函数变量。但它给了我这个错误,这里有什么问题?

Error in functionE(A[[i]],A,weight) : 
argument "weight" is missing, with no default

代码结构:

weight<-weight
A<-functionB() #A is a list 
C<-lapply(1:length(A),function(i,A,weight){

if(functionE(A[[i]],A,weight)==TRUE)
    #some other functions
return(A)
    })

编辑:实际上A是图表列表(为简单起见,我的布局就是这样)

 for (i in 1:vcount(A[[1]])
    {
     #some function and if condition that needs((weight and, A))
     #there is a function which return j
      V(A[[1]])[i]$attribute2<-V(A[[1]])[j]$attribute1
     }

所以我想访问for。中的A更改。

1 个答案:

答案 0 :(得分:1)

首先,全局环境中的R变量对于函数是可见的,因此您不必按照您的方式传递它们。

我并不完全清楚你想做什么,但apply函数族使用你的输入作为第一个变量而其他变量需要是常量(除非你使用mapply)。您需要将这些其他变量作为变量传递给(s/l)apply

lappy(1:length(A), function(i,A,weight){
    #whatever your function does
},A,weight)

在这种情况下,i将从1到长度(A)交替,而所有其他变量将保持不变。请注意,您根本不需要添加Aweight,因为您可以在函数内部使用它们而无需手动传递它们。