如何使用R(tidyverse)中的函数迭代创建多个小标题?

卡尔·约翰逊

我必须使用相同的变量创建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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从R中的小标题创建列表列表(tidyverse)

创建一个函数来迭代R中大列表中的小标题元素

迭代地将函数输出添加到 R 中的小标题

如何在tidyverse setNames()中索引小标题

将相同的函数映射到列表中的多个小标题

如何创建然后在小标题的某些列上应用函数?

如何将列表元素提取到R中的多个小标题列中?

如何从get_friends函数返回的小标题列表中删除空小标题?

如何用r中几个变量的重复和未重复测量来创建小标题?

在R中使用count函数时,如何仅从小标题中提取int值?

如何使用参数列表(小标题)进行函数调用

如何使用函数来分析所有小标题中的所有行,将我的数据放在小标题列表中?

R:如何在小标题中访问小标题?

如何在 r 中绘制我的小标题,如下所示?

如何使用 R lang 映射一个小标题?

如何避免在地图迭代块中创建多个新函数

如何将小标题列中的向量提取到同一小标题中的多个列?

如何在不丢失数据的情况下在 R 中创建小标题列表(来自 xlsx 文件)?

使用purrr逐行创建小标题

如何在javascript中迭代多个标题

如何在Swift中的大标题下创建字幕或小标题

如何用 R 中另一个小标题的插补列替换小标题中的 NA 列

无法在R中收集小标题

使用R线图绘制小标题

如何在Storybook中显示小标题?

R - 为什么我的函数似乎可以工作,但不能更新列表中的小标题?

R:使用来自矢量的列名创建空的小标题/数据框

将小标题扩展为行,并使用R根据行创建新列

创建小标题,其中一栏是函数