我必须使用相同的变量创建10个小标题(数据有所不同),这导致我复制以下代码
dpd <- list_sheets[[1]] %>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d"))) %>%
select(-DATEMODIFI) %>%
filter(year == 2019),
fuse <- list_sheets[[2]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d"))) %>%
select(-DATEMODIFI) %>%
filter(year == 2019),
ohprimary <- list_sheets[[3]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d"))) %>%
select(-DATEMODIFI) %>%
filter(year == 2019),
ohsecondary <- list_sheets[[4]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d"))) %>%
select(-DATEMODIFI) %>%
filter(year == 2019),
poles <- list_sheets[[5]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d"))) %>%
select(-DATEMODIFI) %>%
filter(year == 2019),
pv <- list_sheets[[6]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d"))) %>%
select(-DATEMODIFI) %>%
filter(year == 2019),
switch <- list_sheets[[7]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d")))%>%
select(-DATEMODIFI) %>%
filter(year == 2019),
transformers <- list_sheets[[8]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d")))%>%
select(-DATEMODIFI) %>%
filter(year == 2019),
ugprimary <- list_sheets[[9]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d")))%>%
select(-DATEMODIFI) %>%
filter(year == 2019),
ugsecondary <- list_sheets[[10]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d")))%>%
select(-DATEMODIFI) %>%
filter(year == 2019)
因此,我创建了以下函数,并尝试迭代创建它们,如下所示:
createTibble <- function(i){
list_sheets[[i]]%>%
filter(LASTUSER %in% users ) %>%
mutate(year = as.numeric(format(DATEMODIFI, format = "%Y")),
month = as.numeric(format(DATEMODIFI, format = "%m")),
day = as.numeric(format(DATEMODIFI, format = "%d")))%>%
select(-DATEMODIFI) %>%
filter(year == 2019)
}
features <- c('dpd', 'fuse')
for (feature in seq_along(features)){
tibble <- sym(features[feature]) # returns the proper symbol e.g. 'dpd' -> dpd
tibble <- createTibble(feature) # This just gives me a table called tibble
}
这不会给我两个小标题(dpd和融合),相反,我只会得到一个叫tibble的小标题
我究竟做错了什么?我爱R,但是为什么要做这样的事情一定很烦
编辑:
features <- c('dpd', 'fuse')
output <- vector('list', length(features))
for (feature in seq_along(features)){
output[[feature]] <- createTibble(feature)
name <- sym(features[feature])
print(name)
name <- output[[feature]]
}
为了创建一个list
对象,初始化用空list
并且该值基于所述功能的在每次迭代的输出分配给它for
循环
features <- c('dpd', 'fuse')
output <- setNames(vector('list', length(features)), features)
for (feature in seq_along(features)){
output[[feature]] <- createTibble(feature)
}
不建议在全局环境中有多个对象,但是如果需要,可以使用一个选项 assign
for (feature in seq_along(features)){
assign(features[feature], value = createTibble(feature))
}
现在,我们检查
ls()
对于创建的对象
或使用 tidyverse
library(purrr)
map(seq_along(features), ~createTibble(.x)) %>%
set_names(features) %>%
list2env(.GlobalEnv)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句