Ошибка при использовании карты мурлыкания и, возможно, - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь запустить зацикленный хи-квадрат dataframe. Я использую map и possibly, оба из purrr, чтобы позволить циклу работать, даже если выдается ошибка. Где-то в моем data.frame у меня есть столбец, который, по-видимому, имеет менее двух значений - я не могу его найти. Но именно поэтому я пытаюсь запустить possibly. Но теперь я получаю сообщение об ошибке: «Невозможно преобразовать список в функцию». Я не уверен, как примирить эту ошибку. Я получил воспроизводимый пример, который выдает ошибку, используя mtcars data.frame.

library(tidyverse)

df <- mtcars %>% 
  mutate(z = 0)

map(df, function(x){
  possibly(chisq.test(df$gear, x), otherwise = NA)
})

# Error: Can't convert a list to function
# In addition: Warning message:
# In chisq.test(df$gear, x) :
#  Show Traceback
#  
#  Rerun with Debug
#  Error: Can't convert a list to function 

Любой совет?

1 Ответ

0 голосов
/ 11 ноября 2018

Проблема в том, как вы используете possibly. possibly необходимо обернуть функцию, которая генерирует ошибку. Вы думаете, что это будет chisq.test. Не ошибаюсь, потому что это был бы и мой первый выбор. Но внутри карты это не тот, который выдает ошибку. Функция, которую вы создали для части .f функции map, выдает ошибку. Я надеюсь, что мое объяснение понятно, но проверьте следующие примеры, чтобы сделать его немного более понятным в коде.

пример 1:

# Catch error of chisq.test by wrapping possibly around it
map(df, possibly(chisq.test, NA_real_), x = df$gear)

$`mpg`

    Pearson's Chi-squared test

data:  df$gear and .x[[i]]
X-squared = 54.667, df = 48, p-value = 0.2362

......

$z
[1] NA

Пример 2 равных результатов:

# Catch error of created function inside map. wrap possibly around it
map(df, possibly(function(x) {
  chisq.test(df$gear, x)}
  , NA_real_ ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...