lapply函数与我想从一个循环的数据框中选取的参数 [英] lapply function with arguments I want to pick from a dataframe with a loop
问题描述
我对R还是很陌生,到目前为止还没有找到任何答案.抱歉终于要问了.
I'm still very new to R and haven't found any answer so far. Sorry to finally ask.
带有简单示例的版本: 我想根据南非数据计算一个多维发展指数. 我的清单是由每年的个人信息组成的,因此,基本上df1大约是1年,而df2大约是2年.
Edition with a quick example: I want to compute a multidimensional development index based on South Africa Data. My list is composed of individual information for each year, so basically df1 is about year 1 and df2 about year2.
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)
您可以在这里找到一个非常简化的工作索引函数:
You can find here a very simplified working index function:
myindex <- function(x, dimX, dimY){
econ_i<- ( x[dimX]+ x[dimY] )
return ( (1/length(econ_i))*sum(econ_i) )
}
myindex(df1, "var2", "var3")
然后我有要用于索引的变量数据框
Then I have my dataframe of variables I want to use for my index
mydf <- data.frame(set1=c("var1", "var2"), set2=c("var2", "var3"))
我正在使用一个函数来从数据库中获取参数,例如:
I'm using a function to get arguments from database such as:
pick_values <-function(x){
vect <-c()
for(i in x){
vect <- c(vect, i)
}
return(vect)
}
我想建立一个lapply循环,以便对数据框中的所有参数集将函数应用于列表.换句话说,我想用我可以使用的所有变量集来计算两年的指数. //结束编辑
I'd like to set up a lapply loop such that I apply my function for my list, for all sets of arguments in my dataframe. In other words, I'd like to compute my index for both years, with all sets of variables I can use. //end Edit
到目前为止,我已经尝试了许多失败的事情.例如:
I've tried many unsuccessful things so far. For instance:
lapply(mylist, myindex, lapply(mydf,pick_values))
非常感谢您的帮助!
推荐答案
好吧,我不喜欢您的mydf
名称,也不喜欢它具有因素,因此我将其重命名为args
,因为它具有函数自变量并且我设置了stringsAsFactors = F
:
Okay, I don't like your mydf
name nor that it has factors, so I rename it args
because it has function arguments and I set stringsAsFactors = F
:
args <- data.frame(set1=c("var1", "var2"), set2=c("var2", "var3"), stringsAsFactors = F)
我们还将为myindex
编写一个包装程序,该包装程序接受参数向量而不是dimX
和dimY
:
We'll also write a wrapper for myindex
that accepts a vector of arguments instead of dimX
and dimY
:
myindex2 = function(x, d) {
myindex(x, d[1], d[2])
}
然后我们可以像这样嵌套lapply
:
Then we can nest lapply
like this:
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
这篇关于lapply函数与我想从一个循环的数据框中选取的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!