首页 > 解决方案 > 如何使用 R 中的 tidyverse 创建一个将不同类别添加到表中的函数

问题描述

我正在创造很多小玩意。然而,因为这是可重复的,所以我正在尝试创建一个可以简化我的工作的函数。有必要在 R 中使用 tidyverse 库创建此函数。这是创建的函数:

cfg_write <- function(given = c(1:2), 
                              common = c(1:2), 
                              table = name_of_a_table, 
                              path = "path/to/save"){

        table <- tibble::tibble(given = c(1:2),
                                common = c(1:2))
        table 

        saveRDS(table, file = path)

    }

请记住,在函数中的给定和通用参数中,我想传递超过 2 个字符串,有时我可以达到 18 个级别,而不是在“给定”和“通用”中设置的 2 个级别。

创建函数时我没有得到两件事:

  1. 我希望当我传入给定参数和公共参数时,我会得到额外的行。这些是给定变量的类别。
  2. 其次,当我尝试创建几个小标题时,我得到一个有两列的小标题,这很好,而且每一列都有一个数字,1 和 2,这不是我所期望的。

这就是我所做的,更具体地说:

test <- cfg_write(given = c('Adrian', "Mary", "Neil"), 
                   common = c("name1", "name2", "name3"), 
                   table = test, path = "/users/bg/test.rds")

但是,我明白了:

dput(test)
structure(list(given = 1:2, common = 1:2), row.names = c(NA,-2L), class = c("tbl_df", "tbl", "data.frame"))

有人可以帮忙吗?

标签: rfunctiontidyverse

解决方案


您尚未将参数名称传递到函数体中。由于您没有在函数体中使用这些参数,因此在使用函数时提供的任何新参数都将被忽略。table 参数也已过时,因为 tibble 的名称将是您分配函数调用的任何名称,在这种情况下为test. 也许这会让事情朝着正确的方向发展?注意我已经更改了文件路径

cfg_write <- function(given = c(1:2), 
                              common = c(1:2),
                              path = "path/to/save"){

        table <- tibble::tibble(given = given,
                                common = common)

        saveRDS(table, file = path)

    }

test <- cfg_write(given = c('Adrian', "Mary", "Neil"), 
                  common = c("name1", "name2", "name3"), 
                  table = test, path = "Desktop/test.rds")
readRDS("Desktop/test.rds")

  provided standard
  <chr>    <chr>   
1 Adrian   name1   
2 Mary     name2   
3 Neil     name3 



推荐阅读