R ';数据';不是从';名称空间:my#u package';
我正在编写一个使用外部数据的函数,如下所示:R ';数据';不是从';名称空间:my#u package';,r,namespaces,devtools,roxygen2,R,Namespaces,Devtools,Roxygen2,我正在编写一个使用外部数据的函数,如下所示: #' 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 首先,它检查数据是否在data/
#' 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
首先,它检查数据是否在data
/文件夹中,如果不在,它将创建data
/文件夹,然后从github下载文件
如果数据已经在data/
文件夹中,它将读取数据并执行计算
问题是,当我跑步时:
devtools::check()
它返回:
Error: 'data' is not an exported object from 'namespace:my_package'
我应该手动在名称空间中放置一些内容吗
例如:
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)
}
my_function它不可能在所有情况下都是相同的,但是我通过删除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,只需围绕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'
上面Flick先生的评论救了我。我只是更改了数据文件夹中一个.rda文件的名称。我无法让devtools::document()重新创建名称空间文件。解决方案是将数据重新保存到.rda文件中。(当然,我应该记得,当从.rda文件加载时,R对象的名称与.rda文件的名称无关,因此重命名.rda文件没有多大作用。)在尝试以下操作时,我遇到了这个“错误:'weekly'不是从“namespace:ISLR”导出的对象:
library(ISLR)
w通常,当data
文件夹中某个rda文件的名称与R/data.R
中描述的名称不匹配时,会发生这种情况
在这种情况下,错误消息中的数据
引用针对的是数据.csv
,而不是数据
文件夹。您需要在R软件包的数据
文件夹中包含rda文件。如果要下载csv,需要将其放入inst/extdata
这是说,你可能想考虑使用<代码> TimeDIVE()/代码>来在会话的临时文件夹中保存这些文件。
< P>我花了几个小时试图修复这个问题。终于让它起作用了。
注:
数据文件的类型必须为“rda”。“rds”无法工作
文件名必须小写
文档名中的NULL不适用于我。必须是小写字符串
一般来说,相同的错误消息似乎是由多种原因造成的。检查者不喜欢的任何与数据文件相关的内容都会发出相同的错误。在这种情况下很难调试。我将添加另一个陷阱。在RStudio中工作
我已将一个字符串分配给MyString
,并保存在我的包项目的数据文件夹中:
save(MyString, file="./data/MyString.RData")
我的/R/data.R
文件包含以下文档:
#' A character string
#'
"MyString"
这是可行的。但是你必须为每个对象使用一个文件,而不是保存(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不是名称空间“package name”中导出的对象
通过将df.RData
文件的变量名更改为
df=read.table("df.txt")
save(df,file="df.RData")
知道这是为什么吗?对于使用learnr包构建的教程中使用的数据,我有类似的问题和解决方案。对于函数,此命名空间错误似乎可以通过使用以下方法得到解决:::我在尝试重命名包中包含的数据集时遇到了相同的问题。在我的情况下,我用于创建文件s的df的名称要包含在.rda元数据中的EEM,命名空间会查找它。我在save命令中更改了df的名称以匹配输出文件,这就解决了它。例如:save(my_-df,file=“data/my_-df.rda”).R不喜欢“my_-df“以不同的名称保存。这对我来说很奇怪,因为我的包有2个数据集,1个有data.R文件,我删除了另一个,但它们在包中的行为相同。