【发布时间】:2019-12-17 01:39:12
【问题描述】:
我必须创建 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
}
这不会给我两个 tibble(dpd 和 fuse)而是我只会得到一个名为 tibble 的 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]]
}
【问题讨论】:
-
您需要创建一个列表来存储输出,即
out <- vector('list', length(features)),在for循环内,out[[feature]] <- createTibble(feature)tibble是一个函数名,请使用不同的名称作为对象名 -
我没有看到任何编辑,
same exact result是什么意思(是来自for循环的那个吗?)请展示一个可重复的小示例 -
如果你已经分配了
output[[feature]] <- createTibble(feature)并且你的createTibble有效,那么它应该返回output中的两个元素,因为你已经创建了output <- vector('list', length(features)),检查output如果你正在检查@987654335 @,事实并非如此。此外,您可能需要在for循环之后将“输出”的名称指定为names(output) <- features,即不需要name <- sym(features[feature]) -
我不建议在全局环境中创建多个对象
-
我发布了一个包含您想要的要求的解决方案