【发布时间】:2013-12-21 15:24:40
【问题描述】:
所以我试图创建一个数据帧列表的列表,主要是为了通过 mclapply 将它们传递给多个内核。但这不是我遇到麻烦的部分。我编写了一个函数来从一个大数据帧创建一个较小数据帧的列表,然后按顺序应用它以将一个大数据帧分解成一个小数据帧列表的列表。问题在于,当第二次调用该函数时(通过 lapply 到第一个数据帧列表),它会将额外的小数据帧添加到较大列表中的每个数据帧列表中。我不知道为什么。我不认为这是 lapply,因为当我在第一个列表中的一个帧上手动运行该函数时,它也确实有效。代码如下:
create_frame_list<-function(mydata,mystep,elnames){
datalim<-dim(mydata)[1]
mylist<-list()
init<-1
top<-mystep
i<-1
repeat{
if(top < datalim){
mylist[[i]]<-assign(paste(elnames,as.character(i),sep=""),data.frame(mydata[init:top,]))
}
else {
mylist[[i]]<-assign(paste(elnames,as.character(i),sep=""),data.frame(mydata[init:datalim,]))
}
if(top > datalim){break}
i<-i+1
init<-top+1
top<-top+mystep
}
return(mylist)
}
test_data<-data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))
#Create the first list of data frames, works fine
master_list<-create_frame_list(test_data,300,"bd")
#check the dimensions of the data frames created, they are correct
lapply(master_list,dim)
#create a list of lists of data frames, doesn't work right
list_list<-lapply(master_list,create_frame_list,50,"children")
#check the dimensions of the data frames in the various lists. The function when called again is making extra data frames of length 2 for no reason I can see
lapply(list_list,lapply,dim)
就是这样。一如既往地感谢任何帮助。
【问题讨论】:
标签: r functional-programming lapply