如何解决imap-返回R中列表中的结果
其中包含的大多数代码都具有可重复性,我的问题是关于从imap()
函数导出结果的情况。
我编写了一些汇总和汇总数据的函数,如下所示。它会创建一个列表,其中包含多个列表-每个齿轮都有一个列表。
splitCars <- split(mtcars,mtcars$cyl)
summarizeMtcarsYearly <- function(x)
{
#Ngears
v1 <- length(unique(x$gear))
v2 <- paste0(unique(levels(as.factor(x$gear))),collapse = ',')
#Build data
y <- data.frame(Ngears=v1,gears=v2,stringsAsFactors = F)
return(y)
}
summarizeMtcars <-function(){
splitCars <- split(mtcars,mtcars$cyl)
splitCars <- lapply(splitCars,summarizeMtcarsYearly)
}
splitCars <- summarizeMtcars()
对于列表中的每个齿轮,我想创建汇总表。我也为此编写了一个函数(如下)。细节并不重要,这仅仅是为了重现性。此功能的重要部分是将表格导出到结果文件夹的位置-最后5行。
createSummaryTable <- function(x,y){
tab <- plot_ly(
type = 'table',header = list(
values = c(paste0("Gears = "),y,""),align = c('left',rep('center')),line = list(width = 1,color = 'black'),fill = list(color = 'rgb(235,100,230)'),font = list(family = "Arial",size = 14,color = "white")
),cells = list(
values = rbind(c('number of gears','list of gears'),c(x$Ngears,x$gears)),line = list(color = "black",width = 1),fill = list(color = c('rgb(235,193,238)','rgba(228,222,249,0.65)')),size = 12,color = c("black"))
))
test_dir <- "/Users/testFolder"
tab <- plotly_json(tab,FALSE)
tabName <- paste0("summaryVariables_gear_TEST",".json" )
write(tab,paste0(test_dir,"/",tabName))
}
我假装不知道我的数据将要使用多少齿轮,然后使用imap()
函数将createSummaryTable
应用于列表的每个元素,并将其直接导出到预定义的文件夹中:
splitCars <- summarizeMtcars()
imap(splitCars,function(x,y) createSummaryTable(x,y))
这正是我想要的方式。但是,现在,我需要返回列表中每个齿轮的所有表,如下所示:
createSummaryTable <- function(x,y){
tab <- ... # this is the same as before
tabname <- paste0("summary_",y)
assign(tabname,tab)
}
analysis.summaryTables <- function(){
# create tables
splitCars <- summarizeMtcars()
imap(splitCars,y))
# append all tables to one list
tables <- ls(patter = "summary_")
out <- do.call(c,list(tables))
}
但是我什么时候运行
summaryTables <- analysis.summaryTables()
summaryTable只是一个空字符串。
如何将imap()的所有输出存储在R中的单个列表中?
如何从功能createSummaryTable
环境访问元素并将它们附加到R中?
解决方法
如果我的理解正确,您有一个函数createSummaryTable
会创建一个对象,一个要特定的表。
您有一个已命名数据框的列表,并且想要将此列表映射到函数中以返回对象名称(特定于表的列表)的列表,这些对象的名称相同,但必须先出现“ summary_”
因此:
createSummaryTable <- function(x,y){
# do something here
return(tbl)
}
# map your list
out <- purrr::imap(list_of_named_dataframes,createSummaryTable)
names(out) <- paste("summary",names(out),sep = "_")
和out
是您要寻找的。 p>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。