lapply函数与我想从一个循环的数据框中选取的参数 [英] lapply function with arguments I want to pick from a dataframe with a loop

查看:69
本文介绍了lapply函数与我想从一个循环的数据框中选取的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对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编写一个包装程序,该包装程序接受参数向量而不是dimXdimY:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆