R 将函数映射到多个数据帧

R 将函数映射到多个数据帧,r,purrr,R,Purrr,我有一个函数,它在数据帧中创建一个新列,在每个单元格中重复数据帧的名称: add_column_with_name <- function(x) { x$name <- deparse(substitute(x)) return(x) add\u column\u with_name此解决方案有效,只要您对列表元素使用正确的名称: df_y <- tibble(x = c(1,2,3,4), y = c('a', 'b', 'c', 'd')) df_x &l

我有一个函数,它在数据帧中创建一个新列,在每个单元格中重复数据帧的名称:

add_column_with_name <- function(x) {
    x$name <- deparse(substitute(x))
    return(x)

add\u column\u with_name此解决方案有效,只要您对
列表
元素使用正确的
名称

df_y <- tibble(x = c(1,2,3,4), y = c('a', 'b', 'c', 'd'))
df_x <- tibble(x = c(5,6,7,8), y = c('e', 'f', 'g', 'h'))

df_list <- list(df_y, df_x) # we create the list

names_list <- c("df_y", "df_x") # we need to name each element 

map2(df_list, names_list, function(x,y) {x$name = y # assignment
                                         x}) 

只要对
列表
元素使用适当的
名称
,此解决方案就可以工作:

df_y <- tibble(x = c(1,2,3,4), y = c('a', 'b', 'c', 'd'))
df_x <- tibble(x = c(5,6,7,8), y = c('e', 'f', 'g', 'h'))

df_list <- list(df_y, df_x) # we create the list

names_list <- c("df_y", "df_x") # we need to name each element 

map2(df_list, names_list, function(x,y) {x$name = y # assignment
                                         x}) 

您可以使用quote来阻止对df_x和df_y进行求值:

purrr::map_df(list(quote(df_x),quote(df_y))
         , function(x) {y <- eval(x); y$name <- as.character(x); y})
## A tibble: 8 x 3
#      x y     name 
#  <dbl> <chr> <chr>
#1     5 e     df_x 
#2     6 f     df_x 
#3     7 g     df_x 
#4     8 h     df_x 
#5     1 a     df_y 
#6     2 b     df_y 
#7     3 c     df_y 
#8     4 d     df_y
purrr::map_df(列表(引号(df_x),引号(df_y))

,函数(x){y您可以使用引号阻止对df_x和df_y求值:

purrr::map_df(list(quote(df_x),quote(df_y))
         , function(x) {y <- eval(x); y$name <- as.character(x); y})
## A tibble: 8 x 3
#      x y     name 
#  <dbl> <chr> <chr>
#1     5 e     df_x 
#2     6 f     df_x 
#3     7 g     df_x 
#4     8 h     df_x 
#5     1 a     df_y 
#6     2 b     df_y 
#7     3 c     df_y 
#8     4 d     df_y
purrr::map_df(列表(引号(df_x),引号(df_y))

,函数(x){y看看你的df_向量,没有更多的df_x和df_y的足迹。这很正常:c计算它的参数。正如Nicolas2所提示的,你需要一个包含命名元素的列表。如果你有一个命名列表,你可以使用
imap
命名。列表看看你的df_向量,没有更多的df_x和df_y的足迹。这很正常:c计算其参数。正如Nicolas2所提示的,您需要一个包含命名元素的列表。如果您有命名列表,则可以使用
imap
named.list
$`df_y`
# A tibble: 4 x 3
      x y     name 
  <dbl> <chr> <chr>
1     1 a     df_y 
2     2 b     df_y 
3     3 c     df_y 
4     4 d     df_y 

$df_x
# A tibble: 4 x 3
      x y     name 
  <dbl> <chr> <chr>
1     5 e     df_x 
2     6 f     df_x 
3     7 g     df_x 
4     8 h     df_x 
purrr::map_df(list(quote(df_x),quote(df_y))
         , function(x) {y <- eval(x); y$name <- as.character(x); y})
## A tibble: 8 x 3
#      x y     name 
#  <dbl> <chr> <chr>
#1     5 e     df_x 
#2     6 f     df_x 
#3     7 g     df_x 
#4     8 h     df_x 
#5     1 a     df_y 
#6     2 b     df_y 
#7     3 c     df_y 
#8     4 d     df_y