Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带参数的lappy函数,我想从带有循环的数据帧中选取参数_R_Loops_Dataframe_Lapply - Fatal编程技术网

R 带参数的lappy函数,我想从带有循环的数据帧中选取参数

R 带参数的lappy函数,我想从带有循环的数据帧中选取参数,r,loops,dataframe,lapply,R,Loops,Dataframe,Lapply,我对R还是很陌生,到目前为止还没有找到任何答案。很抱歉最后问你 带一个快速示例的版本: 我想计算一个基于南非数据的多维发展指数。 我的列表由每年的个人信息组成,因此基本上df1是关于第一年的,df2是关于第二年的 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 <-l

我对R还是很陌生,到目前为止还没有找到任何答案。很抱歉最后问你

带一个快速示例的版本: 我想计算一个基于南非数据的多维发展指数。 我的列表由每年的个人信息组成,因此基本上df1是关于第一年的,df2是关于第二年的

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)

非常感谢你的帮助

好的,我不喜欢你的
mydf
名称,也不喜欢它有因子,所以我把它重命名为
args
,因为它有函数参数,我设置了
stringsafactors=F

args <- data.frame(set1=c("var1", "var2"), set2=c("var2", "var3"), stringsAsFactors = F)
然后我们可以像这样嵌套
lappy

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

也许可以使用
mapply
,这对迭代多个参数很好?或者重写
fun
以期望
列表(arg1,arg2)
作为第二个参数?如果没有一个小的可重复的示例,没有几行
数据
,没有一个示例
mylist
,很难判断。似乎
pick\u values
并没有做任何有用的事情,似乎
lappy(data,pick\u values)
as.list(data)
的低效版本。谢谢Gregor的回答。我用一个简单的例子编辑了我的文本,使其更容易获取。好吧,要清楚的是,在
mydf
中有两列,在
mylist
中有两个数据框,所以您希望得到一个包含2*2=4个评估的列表?是的,确实如此!)您希望结果完全嵌套吗?例如,你可以有一个结果列表,它的结构是(a)
results=list(df1=list(set1,set2),df2=list(set1,set2))
,或者(b)
list(set1=list(df1,df2),set2=(df1,df2))
,或者(c)一个平面结构
list(df1_set1,df1_set2,df2_set2)
,再次感谢你,格雷戈,这真的很有帮助。也就是说,我不明白嵌套的lappy函数是如何工作的。我正在寻找关于这些嵌套函数的好教程!:)My outer apply将函数应用于
mylist
的每个项目。我应用什么功能?任意函数
函数(m)lappy(args,myindex2,x=m)
,注意内部
lappy
不适用于
m
,它应用于
args
的每个元素,并使用
m
的当前值作为参数。如果外部循环是
for(mylist中的m){for(args中的a){myindex2(x=m,d=a)}
,并且设置了一个方便的列表容器来捕获结果,那么这与嵌套for循环是相同的。非常感谢,这就是我最终设法弄明白的。但更好的是,如果解释得当:)你的尝试没有成功,因为没有筑巢。您有
lappy(mylist,FUN=myindex,…=lappy(mydf,pick_值))
,这相当于
a=lappy(mydf,pick_值);对于(mylist中的m){myindex(m,a)}
,和
a
只是将不同迭代中需要的所有参数集中在一起。
pick_values <-function(x){
    vect <-c()
    for(i in x){
    vect <- c(vect, i)
    }
    return(vect)
    }
lapply(mylist, myindex, lapply(mydf,pick_values))
args <- data.frame(set1=c("var1", "var2"), set2=c("var2", "var3"), stringsAsFactors = F)
myindex2 = function(x, d) {
    myindex(x, d[1], d[2])
}
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