[英]'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件事要檢查:
#' 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
RData 文件在 data/ 文件夾中被適當地命名為導出。
使用名稱數據加載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 文件並沒有多大作用。)
我花了幾個小時試圖解決這個問題。 終於讓它工作了。
筆記:
通常,似乎相同的錯誤消息是由幾件事引起的。 檢查器不喜歡與數據文件相關的任何內容,它都會發出相同的錯誤。 在這種情況下很難調試。
我將添加另一個陷阱。 在 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.