我有这三个数据框和这个功能
set.seed(1)
df1 <-
data.frame(
x = c("cat", "dog"),
y = sample(1:100, 20),
z = seq(ymd("2020-01-01"), ymd("2020-01-20"), by = "1 day")
)
df2 <-
data.frame(
x = c("red", "green"),
y = sample(1:100, 20),
z = seq(ymd("2020-01-01"), ymd("2020-01-20"), by = "1 day")
)
df3 <-
data.frame(
x = c("up", "down"),
y = sample(1:100, 20),
z = seq(ymd("2020-01-01"), ymd("2020-01-20"), by = "1 day")
)
dataframes <-
c("df1", "df2", "df3")
exploreDataFrames <- function(dataframes, sequence = seq_along(dataframes)){
for (i in seq_along(sequence)){
print(get(dataframes[i]))
gg <-
get(dataframes[i]) %>%
ggplot(aes(z, y, group = 1)) +
geom_line() +
facet_wrap(~get(names(get(dataframes[i]))[1]))
return(gg)
}
}
exploreDataFrames(dataframes[3])
Run Code Online (Sandbox Code Playgroud)
我希望我的函数返回一个包含三个条目的列表:
list[1][1] <- name_of_the_dataframe
list[1][2] <- copy_of_the_complete_dataframe
list[1][3] <- ggplot_object
Run Code Online (Sandbox Code Playgroud)
我的目标是能够拥有一个列表并遍历 ggplot 图表,快速能够按特定数据框的名称对其进行切片并提取完整的数据框。
我需要对我的功能进行哪些更改才能使其成为可能?
您可以使用
l = sapply(dataframes, function (dfname) {
ggplot(get(dfname) , aes(z, y, group = 1)) +
geom_line() +
facet_wrap(~get(names(get(dfname))[1]))
}, simplify = FALSE, USE.NAMES = TRUE)
Run Code Online (Sandbox Code Playgroud)
然后 data.frame 名称在 names(l)
names(l[1])
# [1] "df1"
Run Code Online (Sandbox Code Playgroud)
数据在
l[[1]]$data
# x y z
#1 cat 68 2020-01-01
#2 dog 39 2020-01-02
#3 cat 1 2020-01-03
#4 dog 34 2020-01-04
#5 cat 87 2020-01-05
#6 dog 43 2020-01-06
#7 cat 14 2020-01-07
#8 dog 82 2020-01-08
#9 cat 59 2020-01-09
#10 dog 51 2020-01-10
#11 cat 85 2020-01-11
#12 dog 21 2020-01-12
#13 cat 54 2020-01-13
#14 dog 74 2020-01-14
#15 cat 7 2020-01-15
#16 dog 73 2020-01-16
#17 cat 79 2020-01-17
#18 dog 37 2020-01-18
#19 cat 83 2020-01-19
#20 dog 97 2020-01-20
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |