BigDecimal - это то, что вы хотите. Он имеет такие методы, как add (), multiply () pow () и т. Д., Которые возвращают новые объекты BigDecimal.
Когда вы передаете metric
в часть ...
в map
, не ясно, что это столбец во вложенном фрейме данных. Но как только вы вложите данные, как вы сделали, metric
- это не столбец в data
, это столбец во вложенном фрейме ... также называемый «данными». (Это хороший пример того, почему вам нужны более конкретные имена переменных между прочим.)
Если вы отображаете столбец data
, вы можете использовать $metric
, чтобы указать на этот столбец, либо в письменной форме. из функции, как я сделал здесь (например, df$metric
), или в формуле (например, .$metric
).
Как сказал @www, в этом случае вам не нужны вложенные фреймы данных. Но для более сложного случая вам могут понадобиться вложенные фреймы данных, например, для построения моделей, поэтому полезно знать, как ссылаться именно на те данные, которые вы хотите.
library(tidyverse)
data %>%
group_by(name) %>%
tidyr::nest() %>%
mutate(result = map(data, function(df) {
get_sample_size(metric = df$metric, threshold = 0.01)
}))
#> # A tibble: 3 x 3
#> name data result
#> <fct> <list> <list>
#> 1 A <tibble [1 × 1]> <data.frame [1 × 1]>
#> 2 B <tibble [1 × 1]> <data.frame [1 × 1]>
#> 3 C <tibble [1 × 1]> <data.frame [1 × 1]>
Создано в 2019-01-16 с помощью пакета представитель (v0.2.1) sup>
Вам не нужно nest
. Аргумент metric
из функции get_sample_size
должен быть числовым вектором, но если вы сделаете nest
, столбец data
будет списком фрейма данных, который не может быть вводом для аргумента metric
. [1110 ]
Я думаю, что вы можете использовать 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]>