ошибки: это не должно произойти, если что-то не пошло не так - PullRequest
0 голосов
/ 24 мая 2019

Заголовок вопроса не гиперболический, это фактическое сообщение об ошибке:

Error: Attribute, `index_quo`, has been lost, but class is still `tbl_time`. This should not happen unless something has gone horribly wrong.
19.
stop(glue::glue(..., .sep, .envir = parent.frame()), call. = FALSE)
18.
glue_stop("Attribute, `index_quo`, has been lost, ", "but class is still `tbl_time`. This should not happen unless ", "something has gone horribly wrong.")
17.
get_index_quo(.tbl_time)
16.
is_quosure(quo)
15.
quo_squash(quo)
14.
type_of(.x)
13.
switch_type(expr, `NULL` = "NULL", symbol = as_string(expr), quosure = , language = if (is_data_pronoun(expr)) { data_pronoun_name(expr) %||% "<unknown>" } else { ...
12.
expr_name(quo_squash(quo))
11.
rlang::quo_name(get_index_quo(.tbl_time))
10.
get_index_char(x)
9.
get_index_char(x) %in% colnames(x_tbl)
8.
`[.tbl_time`(x, seq_len(n), , drop = FALSE)
7.
x[seq_len(n), , drop = FALSE]
6.
head.data.frame(x, n)
5.
head(x, n)

Особая часть, которая вызвала это:

ad_window <- function(...) {
  data <- tibble(...)
  fit <-
    anomalize::decompose_twitter(data = data,
                                 target = count,
                                 message = FALSE) %>%
    anomalize(remainder, method = "iqr") %>%
    time_recompose()
  return(fit)
}

tidyverse_cran_downloads %>%
  nest(-group_cols())  %>%
  filter(package %in% c("tidyr")) %>%  # just to make it quick
  mutate(
    diag = map(
      data, ~ ptile_dfr(
        ., ad_window, .size = 43
        )
      )
    ) -> tile3result

tile3result$diag

Кажется, это связано с аргументом .size, с которым у меня возникли проблемы с в этом вопросе , который был решен @ earo-wang

Если я сделаю аргумент .size на одну запись меньше, это произойдет:

tidyverse_cran_downloads %>%
  nest(-group_cols())  %>%
  filter(package %in% c("tidyr")) %>%  # just to make it quick
  mutate(
    diag = map(
      data, ~ ptile_dfr(
        ., ad_window, .size = 42
        )
      )
    ) -> tile2result

tile2result$diag

Error in stats::stl(., s.window = "periodic", robust = TRUE) : series is not periodic or has less than two periods

Что является той же ошибкой из моего предыдущего вопроса, за исключением того, что я использую ptile, а не pslide, и на выше .size, чем исходная проблема.

n данных 425, все еще намного выше .size значение:

tidyverse_cran_downloads %>% 
  filter(package %in% c("tidyr")) %>% 
  summarise(n())

Ответ на предыдущий вопрос звучит

tidyverse_cran_downloads %>%
  nest(-group_cols())  %>%
  filter(package %in% c("tidyr")) %>%  # just to make it quick
  mutate(
    anoms = map(
      data, ~ pslide_dfr(
        ., ad_window, .size = 7 * 3
        )
      )
    ) -> slideresult

slideresult$anoms

Просто преобразовав его в ptile ошибки:

tidyverse_cran_downloads %>%
  nest(-group_cols())  %>%
  filter(package %in% c("tidyr")) %>%  # just to make it quick
  mutate(
    diag = map(
      data, ~ ptile_dfr(
        ., ad_window, .size = 7 * 3
        )
      )
    ) -> tileresult

tileresult$diag

Error in stats::stl(., s.window = "periodic", robust = TRUE) : series is not periodic or has less than two periods

Мне кажется, что это сбивает с толку: 1) не должно ли ptile быть заменой на pslide? 2) не должны ли данные иметь одинаковую частоту в обоих случаях?

...