我还是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
编写一个包装器,该包装器接受参数的向量而不是dimX
和dimY
:
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