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文件,我删除了另一个,但它们在包中的行为相同。