带有参数的lapply函数我想从带有循环

时间:2017-12-15 17:46:21

标签: r loops dataframe lapply

我还是R的新手,到目前为止还没有找到任何答案。很抱歉最后问。

版本快速举例: 我想基于南非数据计算多维开发指数。 我的列表由每年的个人信息组成,所以基本上df1大约是第1年,df2大约是第2年。

df1<-data.frame(var1=c(1, 1,1), var2=c(0,0,1), var3=c(1,1,0))
df2<-data.frame(var1=c(1, 0,1), var2=c(1,0,1), var3=c(0,1,0))
mylist <-list (df1,df2)

您可以在这里找到一个非常简化的工作索引函数:

myindex <- function(x, dimX, dimY){
    econ_i<- ( x[dimX]+  x[dimY] ) 
    return ( (1/length(econ_i))*sum(econ_i) )
    }
myindex(df1, "var2", "var3")

然后我有我想用于索引的变量数据框

mydf <- data.frame(set1=c("var1", "var2"), set2=c("var2", "var3"))

我正在使用函数从数据库中获取参数,例如:

pick_values <-function(x){
    vect <-c()
    for(i in x){
    vect <- c(vect, i)
    }
    return(vect)
    }

我想设置一个lapply循环,以便我将我的函数应用于我的列表,用于我的数据帧中的所有参数集。换句话说,我想用两年来计算我的索引,我可以使用所有变量集。 //结束编辑

到目前为止,我尝试了许多不成功的事情。例如:

lapply(mylist, myindex, lapply(mydf,pick_values))

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

好的,我不喜欢你的mydf名称,也没有因素,所以我将其重命名args,因为它有函数参数,我设置了stringsAsFactors = F

args <- data.frame(set1=c("var1", "var2"), set2=c("var2", "var3"), stringsAsFactors = F)

我们还会为myindex编写一个包装器,它接受一个参数向量而不是dimXdimY

myindex2 = function(x, d) {
    myindex(x, d[1], d[2])
}

然后我们可以像这样嵌套lapply

lapply(mylist, function(m) lapply(args, myindex2, x = m))
# $df1
# $df1$set1
# [1] 4
#
# $df1$set2
# [1] 3
#
# 
# $df2
# $df2$set1
# [1] 4
#
# $df2$set2
# [1] 3