What is the meaning of : Warning in do.call(.f, args, envir = .env) : "what" must be a function or character string

What is the meaning of : Warning in do.call(.f, args, envir = .env) : "what" must be a function or character string

这是确切的消息:

Warning in do.call(.f, args, envir = .env) :
  'what' must be a function or character string

在 Azure Databricks 环境中使用 R、spark 和 tidyverse 进行数据处理。 即使 运行 一个空的命令单元格也会出现此消息。

# library(sparklyr)
# library(lubridate)
# library(dplyr)
# library(purrr)
# library(httr)
# library(jsonlite)
# library(tidyr)
# library(arrow)
# library(stringr)
# library(DBI)
# library("readxl")

我用

# if(!require(*library*)){
#   install.packages(*"library"*)
# }

这个警告是我应该担心的还是我应该检查的?我不明白警告,也无法在 google.

上找到正确的文档

如果某些天才包维护者屏蔽了(~覆盖)重要的东西或使用(函数的)名称而不是 do.call 中的字符串,我会看看。

您可以像这样重现问题。

do.call(rbind, list())  ## using the name works as expected
# NULL

现在让我们屏蔽rbind

rbind <- 1
do.call(rbind, list())  ## using the name fails
# Error in do.call(rbind, list()) : 
#   'what' must be a function or character string

瞧瞧。

这里使用字符串比较安全,不会失败

do.call('rbind', list())
# NULL

rm(rbind)  ## unmask `rbind`.

解决方案 很棘手,因为您要加载大量库。不过,您可以执行以下操作:

  1. 关闭R-session,如果使用RStudio,取消选中工具>全局选项>常规>恢复.RData(也许取消选中已经解决了问题!)
  2. 检查 Renviron.siteRenviron.site 文件中的异常条目(可以在 Linux 上的 /etc/R/ 文件夹中找到),或者启动 R -vanilla会话
  3. 开始新的 R 会话
  4. 一个一个地加载每个library,直到发生错误