Automatically split function output (list) into component data.frames

I have a functions which yields 2 dataframes. As functions can only return one object, I combined these dataframes as a list. However, I need to work with both dataframes separately. Is there a way to automatically split the list into the component dataframes, or to write the function in a way that both objects are returned separately?

The function:

install.packages("plyr")
require(plyr)    

fun.docmerge <- function(x, y, z, crit, typ, doc = checkmerge) {
      mergedat <- paste(deparse(substitute(x)), "+",
                        deparse(substitute(y)), "=", z)
      countdat <- nrow(x)
      check_t1 <- data.frame(mergedat, countdat)
      z1 <- join(x, y, by = crit, type = typ)
      countdat <- nrow(z1)
      check_t2 <- data.frame(mergedat, countdat)
      doc <- rbind(doc, check_t1, check_t2)
      t1<-list()
      t1[["checkmerge"]]<-doc
      t1[[z]]<-z1
      return(t1)
    }

This is the call to the function, saving the result list to the new object results .

results <- fun.docmerge(x = df1, y = df2, z = "df3", crit = c("id"), typ = "left")

In the following sample data to replicate the problem:

df1 <- structure(list(id = c("XXX1", "XXX2", "XXX3", 
                             "XXX4"), tr.isincode = c("ISIN1", "ISIN2", 
                                                      "ISIN3", "ISIN4")), .Names = c("id", "isin"
                                                      ), row.names = c(NA, 4L), class = "data.frame")

df2 <- structure(list(id= c("XXX1", "XXX5"), wrong= c(1L, 
                                                      1L)), .Names = c("id", "wrong"), row.names = 1:2, class = "data.frame")

checkmerge <- structure(list(mergedat = structure(integer(0), .Label = character(0), class = "factor"), 
                             countdat = numeric(0)), .Names = c("mergedat", "countdat"
                             ), row.names = integer(0), class = "data.frame")

In the example, a list with the dataframes df3 and checkmerge are returned. I would need both dataframes separately. I know that I could do it via manual assignment (eg, checkmerge <- results$checkmerge ) but I want to eliminate manual changes as much as possible and am therefore looking for an automated way.

链接地址: http://www.djcxy.com/p/38378.html

上一篇: 为什么插页训练占用这么多的记忆?

下一篇: 自动将功能输出(列表)分解为组件数据帧