【问题标题】:'data' is not an exported object from 'namespace:my_package''data' 不是从 'namespace:my_package' 导出的对象
【发布时间】:2018-03-31 22:28:11
【问题描述】:

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

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

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

问题是,当我跑步时:

devtools::check()

它返回:

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 namespaces devtools roxygen2


    【解决方案1】:

    有 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 文件已加载,名称为 data。

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

    【讨论】:

      【解决方案2】:

      我遇到了同样的错误,我可以通过以下方式克服错误。

      数据文件位于: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 is not an exported object from namespace "package name" 相同的错误。

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        #' A character string
        #'
        "MyString"
        

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

        【讨论】:

          【解决方案4】:

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

          注意事项:

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

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

          【讨论】:

            【解决方案5】:

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

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

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

            【讨论】:

              【解决方案6】:

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

              library(ISLR)

              w &lt;- ISLR::weekly

              通过将其更改为以某种方式解决了问题:

              w = ISLR::weekly

              = 标志在这里起到了重要作用。

              【讨论】:

                【解决方案7】:

                当我被错误难住时

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

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

                【讨论】:

                  【解决方案8】:

                  不需要删除/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
                  

                  【讨论】:

                    【解决方案9】:

                    不可能在每种情况下都相同,但我通过删除 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"
                    

                    【讨论】:

                    • 知道为什么会这样吗?对于使用学习器包构建的教程中使用的数据,我遇到了类似的问题和解决方案。对于函数,这个命名空间错误似乎可以通过使用 :::: stackoverflow.com/questions/2165342/… 得到解决
                    • 我在尝试重命名包中包含的数据集时遇到了同样的问题。就我而言,我用来创建文件的 df 的名称似乎包含在 .rda 元数据中,而 NAMESPACE 会查找它。我更改了 df 的名称以匹配保存命令中的输出文件,并且处理了它。例如:save(my_df, file="data/my_df.rda")。如果“my_df”以不同的名称保存,R 不喜欢它。
                    • 这对我有用,这很奇怪,因为我的包有 2 个数据集,1 个有 data.R 文件,我删除了另一个,但它们在包中的行为相同。
                    猜你喜欢
                    • 1970-01-01
                    • 2022-08-12
                    • 2022-01-07
                    • 2021-02-01
                    • 1970-01-01
                    • 2021-03-31
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多