通过 `map()` 传递名称以进行惰性评估
Pass name through `map()` to be evaluated lazily
我正在以编程方式制作一系列图,我想将 tibble(或数据帧)的名称传递到我的 ggplot2 图的标题中,这样我就知道哪个是哪个了。
deparse(substitute(x))
用于从 tibble 制作单个绘图,但在从 tibble 列表制作绘图时通过 purrr::map()
调用时输出 "."
。
#initialize data frame
myDf <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
#initialize function
myPlot <- function(df) {
title = deparse(substitute(df))
ggplot(df, aes(x, y)) +
geom_col() +
ggtitle(title)
}
#call function
myPlot(myDf)
这给了我一个标题为 myDF
的情节。
现在我想对地块列表做同样的事情:
#initialize list of data frames
myDFs <- vector("list", 0)
myDFs$first <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
myDFs$second <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
myDFs$third <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
#initialize same function
myPlot <- function(df) {
title = deparse(substitute(df))
ggplot(df, aes(x, y)) +
geom_col() +
ggtitle(title)
}
#call function with purrr::map
map(myDFs, myPlot)
现在每个标题都相同:.x[[i]]
我很想知道如何通过地图传递信息量更大的标题。它不必很漂亮,但它必须是独一无二的。提前致谢!
我们可以使用专为此类操作而设计的imap
myPlot <- function(df, names) {
ggplot(df, aes(x, y)) +
geom_col() +
ggtitle(names)
}
purrr::imap(myDFs, myPlot)
我们可以使用 base R
中的 Map
Map(myPlot, myDFs, names(myDFs))
或使用iwalk
purrr::iwalk(myDFs, ~ myPlot(.x, .y))
哪里
myPlot <- function(data, nameVec){
ggplot(data, aes(x, y)) +
geom_col() +
ggtitle(nameVec)
}
我正在以编程方式制作一系列图,我想将 tibble(或数据帧)的名称传递到我的 ggplot2 图的标题中,这样我就知道哪个是哪个了。
deparse(substitute(x))
用于从 tibble 制作单个绘图,但在从 tibble 列表制作绘图时通过 purrr::map()
调用时输出 "."
。
#initialize data frame
myDf <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
#initialize function
myPlot <- function(df) {
title = deparse(substitute(df))
ggplot(df, aes(x, y)) +
geom_col() +
ggtitle(title)
}
#call function
myPlot(myDf)
这给了我一个标题为 myDF
的情节。
现在我想对地块列表做同样的事情:
#initialize list of data frames
myDFs <- vector("list", 0)
myDFs$first <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
myDFs$second <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
myDFs$third <- tibble(x = LETTERS[1:5], y = sample(1:10, 5))
#initialize same function
myPlot <- function(df) {
title = deparse(substitute(df))
ggplot(df, aes(x, y)) +
geom_col() +
ggtitle(title)
}
#call function with purrr::map
map(myDFs, myPlot)
现在每个标题都相同:.x[[i]]
我很想知道如何通过地图传递信息量更大的标题。它不必很漂亮,但它必须是独一无二的。提前致谢!
我们可以使用专为此类操作而设计的imap
myPlot <- function(df, names) {
ggplot(df, aes(x, y)) +
geom_col() +
ggtitle(names)
}
purrr::imap(myDFs, myPlot)
我们可以使用 base R
Map
Map(myPlot, myDFs, names(myDFs))
或使用iwalk
purrr::iwalk(myDFs, ~ myPlot(.x, .y))
哪里
myPlot <- function(data, nameVec){
ggplot(data, aes(x, y)) +
geom_col() +
ggtitle(nameVec)
}