'data' 不是 'namespace:my_package' 的导出对象

'data' is not an exported object from 'namespace:my_package'

我正在编写一个使用外部数据的函数,如下所示:

首先,它会检查数据是否在 data/ 文件夹中,如果不在,则创建 data/ 文件夹,然后从 github 下载文件;

如果数据已经在 data/ 文件夹中,它会读取它并执行计算。

问题是,当我 运行:

devtools::check()

它returns:

Error: 'data' is not an exported object from 'namespace:my_package'

我应该在 NAMESPACE 上手动添加一些东西吗?

一个例子:

my_function <- function(x){
if(file.exists("data/data.csv")){
    my_function_calculation(x = x)
  } else {
    print("Downloading source data...")
    require(RCurl)
    url_base <-
 getURL("https://raw.githubusercontent.com/my_repository/data.csv")
    dir.create(paste0(getwd(),"/data"))
    write.table(url_base,"data/data.csv", sep = ",", quote = FALSE)
    my_function_calculation(x = x)
  }
}

my_function_calculation <- function(x = x){
    data <- NULL
    data <- suppressMessages(fread("data/data.csv"))
    #Here, I use data...
    return(data)
}

它不可能在每种情况下都相同,但我通过删除 R/ 文件夹中的 data.R 文件解决了这个问题。

data.R 是一个描述包中所有数据的文件。我从我的代码的前一个版本开始就拥有它,它内置了数据,而不是远程(要下载)。 删除文件解决了我的问题。

data.R 示例:

#' Name_of_the_data
#'
#' Description_of_the_Data
#'
#' @format A data frame with 10000 rows and 2 variables:
#' \describe{
#'   \item{Col1}{description of Col1}
#'   \item{Col2}{description of Col2}
#' }
"data_name"

无需删除/R文件夹中的data.R,只需修饰[=]周围的文档即可15=]NULL关键字如下:

#' Name_of_the_data
#'
#' Description_of_the_Data
#'
#' @format A data frame with 10000 rows and 2 variables:
#' \describe{
#'   \item{Col1}{description of Col1}
#'   \item{Col2}{description of Col2}
#' }
NULL

当我被错误难倒时

Error: 'data' is not an exported object from 'namespace:my_package'

MrFlick 上面的评论救了我。我只是更改了数据文件夹中 .rda 文件的名称。我无法获得 devtools::document() 来重新创建 NAMESPACE 文件。解决方案是将数据重新保存到 .rda 文件中。 (当然我应该记得,当从 .rda 文件加载时,R 对象的名称与 .rda 文件的名称无关,因此重命名 .rda 文件并没有太大作用。)

我在尝试以下操作时遇到了这个“错误:'weekly' 不是 'namespace:ISLR' 的导出对象”:

library(ISLR)

w <- ISLR::weekly

问题已通过将其更改为:

以某种方式解决

w = ISLR::weekly

= 标志让一切变得不同。

通常,当 data 文件夹中的其中一个 rda 文件的名称与 R/data.R 中描述的名称不匹配时,就会发生这种情况。

在这种情况下,错误消息中的 data 引用是针对 data.csv,而不是 data 文件夹。你需要在 R 包的 data 文件夹中有 rda 文件。如果你想下载csv,你需要把它们放在inst/extdata.

话虽如此,您可能要考虑使用 tempdir() 将这些文件保存在会话的临时文件夹中。

我花了几个小时试图解决这个问题。终于成功了。

备注:

  1. 数据文件必须是“rda”类型。 “rds”不起作用。
  2. 文件名必须小写。
  3. 文档名称中的 NULL 对我不起作用。必须是小写字符串。

一般来说,同一条错误消息似乎是由多种原因引起的。检查器不喜欢与数据文件相关的任何内容,它都会发出相同的错误。在那种情况下很难调试。

我再添加一个陷阱。在 RStudio 中工作 我已将一个字符串分配给 MyString 并保存在我的包项目的数据文件夹中:

save(MyString, file="./data/MyString.RData")

我的 ./R/data.R 文件包含相关文档:

#' A character string
#'
"MyString"

这行得通。但是您必须 每个对象一个文件 而不是 save(X, Y, Z, file="BitsAndPieces.RData") 然后再记录 BitsAndPieces。如果你这样做那么你会得到这个问题的错误。我做到了,不用说了。

我遇到了同样的错误,我可以按照下面的方法解决错误。

数据文件位于:data/df.RData
R 文档文件位于:R/df.R

我通过将 df.txt 文件导入 R 并使用 save() 函数创建 .RData 文件来创建 df.RData 文件。我使用以下代码块创建了 .RData 文件。

x=read.table("df.txt")
save(x,file="df.RData")

然后在 运行 RCMD 检查之后,我得到了相同的错误,因为 df 不是来自命名空间“包名称”的导出对象。

我通过将 df.RData 文件的变量名更改为

克服了错误
df=read.table("df.txt")
save(df,file="df.RData")

有 3 件事要检查:

  1. 文档的命名很恰当:
#' Name_of_the_data
#'
#' Description_of_the_Data
#'
#' @format A data frame with 10000 rows and 2 variables:
#' \describe{
#'   \item{Col1}{description of Col1}
#'   \item{Col2}{description of Col2}
#' }
data
  1. RData 文件在 data/ 文件夹中正确命名以便导出。

  2. RData 文件 加载 名称为数据。

如果文档 (1) 是 A,Rdata 文件是 A.RData (2),但是对象(当加载 load() 时)被命名为 B - 你会得到这个完全错误。

重新启动会话解决了我的问题。不知何故环境是空的,重启后所有对象都回来了,因此解决了差异。

我的一个包裹也有同样的问题,我需要添加

LazyData: true

到我的 DESCRIPTION 文件。

我遇到这个问题是因为我将 .rda 文件复制到 R\data 文件夹中。

问题已通过使用 usethis::use_data(DataObject) 解决,它会自动获取 raw-data (DataObject) 文件并将其添加到 R 包目录中的 R\data 文件夹中。