传递给函数时没有适用的 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))
我正在尝试将 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))