在分组数据上应用Purrr :: Map时获取突变错误

时间:2019-01-17 03:12:20

标签: r dplyr purrr

嗨,我正在尝试使用purrr::map应用一个非常简单的功能,但是我一直收到错误Error in mutate_impl(.data, dots) : Evaluation error: unused argument (.x[[i]]).

代码如下:

data = data.frame(name = c('A', 'B', 'C'), metric = c(0.29, 0.39,0.89))
get_sample_size = function(metric, threshold = 0.01){

  sample_size =  ceiling((1.96^2)*(metric*(1-metric))/(threshold^2))
  return(data.frame(sample_size))
}
data %>% group_by(name) %>% tidyr::nest() %>% 
  dplyr::mutate(result = purrr::map( .x = data, .f = get_sample_size,  metric = metric, threshold = 0.01 ))

2 个答案:

答案 0 :(得分:1)

您不需要nestmetric函数的get_sample_size参数应该是数字矢量,但是如果您执行nest,则data列是数据帧的列表,不能作为输入metric参数。

我认为您可以使用summarizemap将函数应用于metric列。

library(tidyverse)

data %>% 
  group_by(name) %>% 
  summarize(result = purrr::map(.x = metric, 
                                .f = get_sample_size,  
                                threshold = 0.01))
# # A tibble: 3 x 2
#   name  result              
#   <fct> <list>              
# 1 A     <data.frame [1 x 1]>
# 2 B     <data.frame [1 x 1]>
# 3 C     <data.frame [1 x 1]>

答案 1 :(得分:1)

当您在y-axis的{​​{1}}部分传递metric时,不清楚这是嵌套数据框中的一列。但是,一旦像完成操作一样嵌套数据,...就不是map中的列,而是嵌套框架中的一列,也称为“数据”。 (这是一个很好的示例,说明了为什么需要更具体的变量名btw。)

如果要在metric列上进行映射,则可以使用data指向该列,既可以编写函数,也可以像我在此处所做的那样(例如{{1 }})或公式符号(例如data)。

正如@www所说,在这种情况下,您不需要嵌套的数据帧。但是对于更复杂的情况,您可能需要使用嵌套的数据框,例如用于构建模型,因此最好知道如何准确地引用所需的数据。

$metric

reprex package(v0.2.1)于2019-01-16创建