嗨,我正在尝试使用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 ))
答案 0 :(得分:1)
您不需要nest
。 metric
函数的get_sample_size
参数应该是数字矢量,但是如果您执行nest
,则data
列是数据帧的列表,不能作为输入metric
参数。
我认为您可以使用summarize
和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]>
答案 1 :(得分:1)
当您在y-axis
的{{1}}部分传递metric
时,不清楚这是嵌套数据框中的一列。但是,一旦像完成操作一样嵌套数据,...
就不是map
中的列,而是嵌套框架中的一列,也称为“数据”。 (这是一个很好的示例,说明了为什么需要更具体的变量名btw。)
如果要在metric
列上进行映射,则可以使用data
指向该列,既可以编写函数,也可以像我在此处所做的那样(例如{{1 }})或公式符号(例如data
)。
正如@www所说,在这种情况下,您不需要嵌套的数据帧。但是对于更复杂的情况,您可能需要使用嵌套的数据框,例如用于构建模型,因此最好知道如何准确地引用所需的数据。
$metric
由reprex package(v0.2.1)于2019-01-16创建