传递给函数时没有适用的 tibble 方法

no applicable method of tibble when passed to a function

我正在尝试将 tibble 传递给函数调用,然后对其执行一些 dplyr 转换。但是,当我将 tibble 传递给函数时,它告诉我无法对 class 字符的对象执行 mutate

例如,假设我有这个数据和这个代码:

dataframe_1 <- tibble(var1 = c('a','b','c','d'), var2 = c('e','f','g','h'))
dataframe_2 <- tibble(var1 = c(1,2,3,4), var2 = c(5,6,7,8))
dataframe_3 <- tibble(var1 = c('i','j','k','l'), var2 = c('m','n','o','p'))
dataframe_4 <- tibble(var1 = c(9,10,11,12), var2 = c(13,14,15,16)) 


function_name <- function(.x) {
  .x %>%
  mutate(var3 = .x)
}
  
print_table <- map_dfr(
  .x = dataframe_1,
  .f = function_name
)

我收到错误 Error in UseMethod("mutate") : no applicable method for 'mutate' applied to an object of class "character"

但是如果我运行这个:

function_name <- function(.x) {
  return(.x)
}

print_table <- map_dfr(
  .x = dataframe_1,
  .f = function_name
)

我明白了

print_table
# A tibble: 4 × 2
  var1  var2 
  <chr> <chr>
1 a     e    
2 b     f    
3 c     g    
4 d     h  

所以 R 能够分辨出 dataframe_1 实际上是一个 tibble,而且我知道可以将 tibble 传送到 mutate() 命令中。

谁能看出我哪里出错了?

如果我们将对象名称创建为列,则根据在 ls,然后使用 imap 遍历 list,并使用 .y

从名称创建列
library(dplyr)
library(purrr)
mget(ls(pattern = 'dataframe_\d+')) %>% 
    imap(~ .x %>%
                 mutate(var3 = .y))