代码之家  ›  专栏  ›  技术社区  ›  elliot

使用purrr映射时出错,并且可能

  •  0
  • elliot  · 技术社区  · 6 年前

    我在试着做一个循环卡方检验 dataframe map possibly ,均来自 purrr . 但是,我现在得到一个错误,上面写着:无法将列表转换为函数。我不知道如何调和这个错误。我得到了一个可复制的示例,它使用 mtcars

    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 回复  |  直到 6 年前
        1
  •  3
  •   phiver    6 年前

    问题在于你如何使用它 possibly . 可能地 需要包装生成错误的函数。你在想这会是一场智力测验。这不是一个错误的想法,因为这也是我的第一选择。但在地图内部,这并不是抛出错误的那个。为的.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_ ))