使用purrr地图时可能出错

时间:2018-11-10 22:33:21

标签: r purrr

我正在尝试运行循环的卡方dataframe。我正在使用map中的possiblypurrr,即使抛出错误也允许循环运行。在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 :(得分:1)

问题在于您如何使用possiblypossibly需要包装产生错误的函数。您以为这将是chisq.test。没错,因为那也是我的第一选择。但是在地图内部,这不是引发错误的地图。您为map函数的.f部分创建的函数将引发错误。我希望我的解释很清楚,但是请查看以下示例以使代码中的内容更加清楚。

示例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_ ))