使大型数据集在包中可用,但不能作为全局变量

时间:2015-06-25 01:33:48

标签: r

这是我第一次尝试创建一个包,所以我猜这是一个非常基本的问题。基本上我想从我的包中导出以下函数:

load_data <- function() {
  requireNamespace(XML, quietly = TRUE)
  xmlfile <- XML::xmlParse("//server/folder/file.xml")
  ps <<- XML::xmlToDataFrame(xmlfile, stringsAsFactors = TRUE)
}

find_record <- function(search_string) {
  return(ps$Var1[ps$Var2 == search_string])
}

delete_record <- function(search_string) {
  ps <<- ps[ps$Var2 != search_string, ]
  return(TRUE)
}

但我不想创建全局变量&#39; ps。什么是将大型数据集用于包内其他功能的正确方法?

1 个答案:

答案 0 :(得分:1)

如果数据文件足够小,可以存储在包中

您的加载函数表明虽然原始数据文件是XML,但它可以转换为数据框。因此,转换为数据框,然后将其作为RData文件保存在包的数据目录中。

如果数据集太大而无法在本地存储,并且它是私有包

您的问题标题暗示它是一个大数据集,并且原始数据驻留在服务器上。在这种情况下,最好将数据存储在数据库中,并在函数内部使用R的数据库访问功能。

如果数据集太大而无法在本地存储,并且它是公共包

我怀疑这超出了问题的范围,但是有大量的R包通过某种Web API提供对在线数据库的访问。