我正在编写一个使用外部数据的函数,如下所示:
首先,它检查数据是否在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)
}
答案 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)
我花了几个小时试图解决这个问题。终于成功了。
注意:
通常,似乎同一错误消息是由多种原因引起的。检查器不喜欢与数据文件相关的所有内容,都会发出相同的错误。在这种情况下很难调试。
答案 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 件事:
#' 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 - 你会得到这个错误。< /p>
答案 8 :(得分:-1)
当我尝试以下操作时,我遇到了此“错误:'weekly'不是从'namespace:ISLR'导出的对象”:
library(ISLR)
w <- ISLR::weekly
通过某种方式将问题更改为:
w = ISLR::weekly
=
符号在这里起到了很大作用。