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

时间:2017-10-19 19:25:51

标签: r namespaces devtools roxygen2

我正在编写一个使用外部数据的函数,如下所示: 首先,它检查数据是否在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)
}

9 个答案:

答案 0 :(得分:5)

在每种情况下都不一样,但我通过删除data.R文件夹上的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"

答案 1 :(得分:1)

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

在这种情况下,错误消息中的data引用适用于data.csv,而不是data文件夹。您需要在R软件包的data文件夹中拥有rda文件。如果要下载csv,则需要将其放入inst/extdata

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

当我被错误困扰时

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

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

答案 4 :(得分:0)

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

注意:

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

通常,似乎同一错误消息是由多种原因引起的。检查器不喜欢与数据文件相关的所有内容,都会发出相同的错误。在这种情况下很难调试。

答案 5 :(得分:0)

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

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

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

#' A character string
#'
"MyString"

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

答案 6 :(得分:0)

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

数据文件位于:let files = ["abc.txt", "/test/abc.htm", "/etc/dev/xyz.html"]; const allowedExtensions = [ ".html", ".htm", ".aspx"]; const filterFiles = (files, allowedExtns) => { return files.reduce((acc, file) => { const lastIndex = file.lastIndexOf("."); //If last index of '.' is not -1 then //take the substring from that index till the end and //check in the allowedExnts array & if the result is true //then add to `valid` array in the `acc` otherwise //add to `invalid` array in the `acc` if(lastIndex !== -1 && allowedExtns.includes(file.substr(lastIndex))) { acc.valid.push(file); } else{ acc.invalid.push(file); } return acc; }, {valid: [], invalid: []}) } console.log(filterFiles(files, allowedExtensions));
R 文档文件位于:data/df.RData

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

.RData

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

我已通过将 x=read.table("df.txt") save(x,file="df.RData") 文件的变量名称更改为

来克服该错误
df.RData

答案 7 :(得分:0)

需要检查 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 - 你会得到这个错误。< /p>

答案 8 :(得分:-1)

当我尝试以下操作时,我遇到了此“错误:'weekly'不是从'namespace:ISLR'导出的对象”:

library(ISLR)

w <- ISLR::weekly

通过某种方式将问题更改为:

w = ISLR::weekly

=符号在这里起到了很大作用。