【发布时间】:2021-01-14 22:29:37
【问题描述】:
包含的大部分代码都具有可重复性,我的问题是关于从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)),
align = c('left', rep('center')),
line = list(color = "black", width = 1),
fill = list(color = c('rgb(235, 193, 238)', 'rgba(228, 222, 249, 0.65)')),
font = list(family = "Arial", size = 12, color = c("black"))
))
test_dir <- "/Users/testFolder"
tab <- plotly_json(tab, FALSE)
tabName <- paste0("summaryVariables_gear_TEST", y, ".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, function(x, y) createSummaryTable(x,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 中?
【问题讨论】:
-
imap中的第二个参数是名称的字符串。如果我从您的代码中正确理解,您正在使用它们。 -
我很害怕我不明白你的意思@Edo。你介意更详细地解释一下吗?
-
tabname <- paste0("summary_", x)不应该是tabname <- paste0("summary_", y)吗? -
哦,当然,你是对的
-
你的例子真的很长,只是在
imap上提问。你确定不能缩短吗?
标签: r list environment-variables apply