'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()
将这些文件保存在会话的临时文件夹中。
我花了几个小时试图解决这个问题。终于成功了。
备注:
- 数据文件必须是“rda”类型。 “rds”不起作用。
- 文件名必须小写。
- 文档名称中的 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 件事要检查:
- 文档的命名很恰当:
#' 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
RData 文件在 data/ 文件夹中正确命名以便导出。
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
文件夹中。
我正在编写一个使用外部数据的函数,如下所示:
首先,它会检查数据是否在 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()
将这些文件保存在会话的临时文件夹中。
我花了几个小时试图解决这个问题。终于成功了。
备注:
- 数据文件必须是“rda”类型。 “rds”不起作用。
- 文件名必须小写。
- 文档名称中的 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 件事要检查:
- 文档的命名很恰当:
#' 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
RData 文件在 data/ 文件夹中正确命名以便导出。
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
文件夹中。