我正在尝试运行循环的卡方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
有什么建议吗?
答案 0 :(得分:1)
问题在于您如何使用possibly
。 possibly
需要包装产生错误的函数。您以为这将是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_ ))