我有两个相同维度的数据框,数据以这种方式组织(简化的复制示例,每个数据框在我的问题中具有重要意义):
df1 <- data.frame(Col1=sample(1000,5),Col2=sample(1000,5))
df2 <- data.frame(Col1=sample(1000,5),Col2=sample(1000,5))
我还有一个相对复杂的函数,它也返回一个数据帧。输入参数分别是df1
和df2
的列。例如:
# if we just run the function for Col1's and other set parameters x,y,z,l,m
# USER_FUNCTION(df1col's,df2col's,x,y,z,l,m...)
> tmp <- USER_FUNCTION(df1[[1]],df2[[1]],x,y,z,l,m)
# the function spits out a dataframe with three columns A,B,C
# column A is a vector of numbers, column B is a vector of strings
# column C is vector of our future rownames
# the rownames are dates pulled from df1 and df2, and stored as strings
> tmp
A B C
1 number1 string1 rownames1
2 number2 string2 rownames2
我目前的解决方案是以这种方式遍历df1
和df2
:
newdf <- data.frame()
for(m in 1:ncol(df1)){
tmp <- USER_FUNCTION(df1[[m]],df2[[m]],x,y,z,l,m)
newdf <- rbind(newdf,tmp)
}
这允许我创建一个newdf
,其中包含使用USER_FUNCTION
和df1
列作为输入参数应用df2
的所有结果。
当df1
和df2
为6000x250(完成所有迭代大约需要4秒)时,循环方法并不差。但是,我最近将我的数据集扩展到6000x500,有时需要更长的时间。
我对apply()
类型函数(或lapply()
,mapply()
等)不太熟悉。我想知道是否有更有效的方法来实现newdf
答案 0 :(得分:1)
尝试:
do.call(rbind, lapply(1:ncol(df1), function(m) USER_FUNCTION(df1[[m]],df2[[m]],x,y,z,l,m)))