Функциональное программирование: используйте гнездо метлы-> приборку-> гнездо и карту в функции - PullRequest
1 голос
/ 18 июня 2019

Мне нужно превратить (рабочий) бит кода dplyr / broom в функцию, так как я буду вызывать его несколько (дюжину) раз.

Я застрял - и это, скорее всего, связано с нестандартной оценкой, смешанной со стандартной оценкой.

Здесь я беру код прямо из виньетки 'метла и dplyr'

library(tidyverse)
library(broom)

data(Orange)

Orange %>% 
  nest(-Tree) %>% 
  mutate(
    test = map(data, ~ cor.test(.x$age, .x$circumference)), 
    tidied = map(test, tidy)
  ) %>% 
  unnest(tidied, .drop = TRUE)

Это работает:

    Tree  estimate statistic      p.value parameter  conf.low conf.high                               method alternative
1    1 0.9854675  12.97258 4.851902e-05         5 0.9012111 0.9979400 Pearson's product-moment correlation   two.sided
2    2 0.9873624  13.93129 3.425041e-05         5 0.9136142 0.9982101 Pearson's product-moment correlation   two.sided
3    3 0.9881766  14.41188 2.901046e-05         5 0.9189858 0.9983260 Pearson's product-moment correlation   two.sided
4    4 0.9844610  12.53575 5.733090e-05         5 0.8946782 0.9977964 Pearson's product-moment correlation   two.sided
5    5 0.9877376  14.14686 3.177093e-05         5 0.9160865 0.9982635 Pearson's product-moment correlation   two.sided

Теперь дело в том, что я хочу сделать из нее функцию .

Так что, если я попробую это:

afunction <- function(data, var) {
  data %>% 
    nest(-Tree) %>% 
    mutate(
      test = map(data, ~ cor.test(.x$age, .x$var)), # S3 list-col
      tidied = map(test, tidy)
    ) %>% 
    unnest(tidied, .drop = TRUE)
}

Это с треском проваливается.

 Error in cor.test.default(.x$age, .x$var) : 'x' and 'y' must have the same length 

Я пытался использовать NSE, цитата, полуквотация. Я признаю, что попробовал немного наугад, так как не могу найти подходящее руководство о том, как позволить NSE и SE хорошо играть вместе с оператором $.

Есть какие-нибудь решения, особенно такие, которые позволят мне раз и навсегда решить эти проблемы? Я также рад за ссылки на соответствующие книги / учебные пособия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...