自动将功能输出(列表)分解为组件数据帧
我有一个产生2个数据帧的函数。 由于函数只能返回一个对象,因此我将这些数据框合并为一个列表。 但是,我需要分别处理两个数据帧。 有没有办法自动将列表分割成组件数据框,或以两种对象分别返回的方式编写函数?
功能:
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)
}
这是对函数的调用,将结果列表保存到新的对象results
。
results <- fun.docmerge(x = df1, y = df2, z = "df3", crit = c("id"), typ = "left")
在以下示例数据中复制问题:
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")
在该示例中,将返回一个包含数据帧df3
和checkmerge
的列表。 我会分别需要两个数据框。 我知道我可以通过手动赋值来完成它(例如, checkmerge <- results$checkmerge
),但我想尽可能地消除手动更改,因此正在寻找一种自动化的方式。
上一篇: Automatically split function output (list) into component data.frames
下一篇: How to open multiple .RDATA and save one of there names as data.frame