我还是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))
非常感谢你的帮助!
答案 0 :(得分:1)
好的,我不喜欢你的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