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

在分组数据上应用Purrr::Map时,获取Mutate错误,r,dplyr,purrr,R,Dplyr,Purrr,嗨,我正试图通过使用purrr::map应用一个非常简单的函数,但是我在mutate_impl(.data,dots)中不断得到错误错误: 计算错误:未使用的参数(.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(

嗨,我正试图通过使用
purrr::map
应用一个非常简单的函数,但是我在mutate_impl(.data,dots)中不断得到错误
错误:
计算错误:未使用的参数(.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 ))

您不需要
嵌套
get\u sample\u size
函数中的
metric
参数应该是一个数字向量,但是如果执行
nest
,则
data
列是一个数据帧列表,不能作为
metric
参数的输入

我认为您可以使用
summary
map
将您的函数应用于
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]>
库(tidyverse)
数据%>%
分组单位(名称)%>%
汇总(结果=purrr::map(.x=metric,
.f=获取样本大小,
阈值=0.01)
##tibble:3 x 2
#命名结果
#                  
#1A
#2 B
#3 C

当您在
映射的
部分传递
度量时,不清楚该列是否是嵌套数据框中的一列。但一旦你像以前那样嵌套了数据,
metric
就不是
data
中的一列,而是嵌套框架中的一列……也称为“data”。(这是一个很好的例子,说明了为什么你需要更具体的变量名。)

如果要映射到
数据
列,可以使用
$metric
指向该列,或者像我在这里所做的那样,在编写函数时(例如
df$metric
),或者在公式表示法中(例如
$metric

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

库(tidyverse)
数据%>%
分组单位(名称)%>%
tidyr::nest()%>%
变异(结果=映射(数据、函数(df)){
获取样本大小(度量=df$metric,阈值=0.01)
}))
#>#tibble:3 x 3
#>名称数据结果
#>                             
#>1A
#>2 B
#>3 C
由(v0.2.1)于2019-01-16创建