簡體   English   中英

“數據”不是從“命名空間:my_package”導出的 object

[英]'data' is not an exported object from 'namespace:my_package'

我正在編寫一個使用如下外部數據的 function:

首先檢查數據是否在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/文件夾中的data.R文件解決了這個問題。

data.R是描述包中所有數據的文件。 從我的代碼的上一個版本開始,我就有了它,它內置了數據,而不是遠程(要下載)。 刪除文件解決了我的問題。

數據示例.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"

通常,當data文件夾中的一個 rda 文件的名稱與R/data.R中描述的名稱不匹配時,就會發生這種情況。

在這種情況下,錯誤消息中的data引用是針對data.csv的,而不是針對data文件夾的。 您需要在 R 包的data文件夾中有 rda 文件。 如果你想下載 csv,你需要把它們放在inst/extdata中。

話雖如此,您可能需要考慮使用tempdir()將這些文件保存在會話的臨時文件夾中。

無需刪除/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件事要檢查:

  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- 你會得到這個錯誤。

當我被錯誤難住時

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

MrFlick 上面的評論救了我。 我只是在我的數據文件夾中更改了一個 .rda 文件的名稱。 我無法讓 devtools::document() 重新創建 NAMESPACE 文件。 解決方案是將數據重新保存到 .rda 文件中。 (當然我應該記住,當從 .rda 文件加載時,R 對象的名稱與 .rda 文件的名稱無關,因此重命名 .rda 文件並沒有多大作用。)

我花了幾個小時試圖解決這個問題。 終於讓它工作了。

筆記:

  1. 數據文件必須是“rda”類型。 “rds”不起作用。
  2. 文件名必須小寫。
  3. 文檔名稱中的 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.RData文件導入 R 並使用save()函數創建.RData文件來創建df.txt文件。 我使用以下代碼塊創建.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")

重新啟動會話為我解決了這個問題。 不知何故,環境是空的,重新啟動后所有對象都回來了,因此解決了差異。

我的一個包裹也有同樣的問題,我需要添加

LazyData: true

到我的說明文件。

我遇到了這個問題,因為我將.rda文件復制到了R\data文件夾中。

問題已通過使用usethis::use_data(DataObject)解決,它會自動獲取原始數據 ( DataObject ) 文件並將其添加到 R 包目錄中的R\data文件夾中。

問題可能是因為您的 object 在保存時是如何命名的。

假設我加載了一個名為“d”的文件,然后我將它保存(如建議的那樣)並在 data/ 目錄中保存為“data”:

save(d, file = "data/data.rda")

然后您將運行干凈並安裝 package,您將收到以下錯誤:

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

看起來你如何在 roxygen 文檔中聲明你的 object 並不重要。 我猜你必須用相同的名稱命名你的 OBJECT,你要保存並加載它。

例如,將您的數據集加載為“pib”object,然后保存為“pib.rda”並在 roxygen“loadData.R”(例如)您的“pib”中聲明。

#' Datos del PIB
#'
#' @docType data
#'
#' @usage data(pib)
#'
#' @format An object of class ...
#'
#' @keywords datasets
#'
#' @references ----
#'
#' @source ----
#'
#' @examples
#' data(pib)
"pib"

我在嘗試以下操作時遇到了這個“錯誤:'weekly' 不是從 'namespace:ISLR'' 導出的對象:

library(ISLR)

w <- ISLR::weekly

通過將其更改為以某種方式解決了該問題:

w = ISLR::weekly

=符號在這里起到了重要作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM