r- 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)
    }

我想设置一个laply循环,以便我将功能应用于列表,以适用于我的数据框架中的所有参数。换句话说,我想在两年内计算我的索引,并使用所有可以使用的变量集。//结束编辑

到目前为止,我已经尝试了许多失败的事情。例如:

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

非常感谢您的帮助!

好吧,我不喜欢您的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

最新更新