这是一个非常好的问题:人们应该非常关注构成统计结果基础的所有数据收集、聚合、转换等序列。不幸的是,这并没有被广泛使用。
在解决您的问题之前,我想强调这似乎与管理数据来源的总体目标非常相关。我不妨给你一个谷歌链接来阅读更多。:) 您会找到大量资源,例如调查、软件工具(例如维基百科条目中列出的一些)、各种研究项目(例如来源挑战)等等。
这是一个概念的开始,现在要解决实际问题:
我现在正在做一个项目,我一直在慢慢地从一堆不同的来源积累一堆不同的变量。作为一个有点聪明的人,我在主“original_data”目录下为每个子目录创建了一个不同的子目录,并包含一个 .txt 文件,其中包含我从中获取数据的 URL 和其他描述符。作为一个不够聪明的人,这些 .txt 文件没有结构。
欢迎来到每个人的噩梦。:)
现在我面临编译一个方法部分的任务,该部分记录了所有不同的数据源。我愿意浏览并向数据添加结构,但随后我需要找到或构建一个报告工具来扫描目录并提取信息。
没问题。 list.files(...,recursive = TRUE)
可能成为好朋友;另 见listDirectory()
。R.utils
值得注意的是,填写数据源的方法部分是数据来源中的一个狭窄应用程序。事实上,相当不幸的是,CRAN 的可重复研究任务视图只关注文档。根据我的经验,数据来源的目标是可重复研究的一个子集,数据操作和结果的文档是数据来源的一个子集。因此,关于可重复性研究,这一任务观点仍处于起步阶段。它可能对你的目标有用,但你最终会超越它。:)
这样的工具存在吗?
是的。这些工具是什么?Mon dieu... 一般来说,它非常以应用程序为中心。在 R 中,我认为这些工具并没有受到太多关注(* 见下文)。这是相当不幸的——要么我遗漏了一些东西,要么 R 社区遗漏了我们应该使用的东西。
对于您描述的基本过程,我通常使用 JSON(请参阅此答案和此答案以获取有关我在做什么的评论)。在我的大部分工作中,我将其表示为“数据流模型”(顺便说一下,这个术语可能是模棱两可的,尤其是在计算方面,但我的意思是从统计分析的角度来看)。在许多情况下,此流程是通过 JSON 描述的,因此从 JSON 中提取序列以解决特定结果的产生方式并不难。
对于更复杂或受监管的项目,JSON 是不够的,我使用数据库来定义如何收集、转换数据等。对于受监管的项目,数据库可能有很多身份验证、日志记录等,以确保数据出处有据可查。我怀疑这种数据库远远超出了您的兴趣,所以让我们继续...
1.
应该使用标记语言(YAML?)
坦率地说,无论您需要什么来描述您的数据流,就足够了。大多数时候,我发现拥有良好的 JSON、良好的数据目录布局和良好的脚本排序就足够了。
2.
应扫描所有子目录
完毕:listDirectory()
3.
为了方便 (2),应使用数据集描述符的标准扩展
琐碎:“.json”。;-) 或者“.SecretSauce”也可以。
4.
至关重要的是,为了使其最有用,需要某种方法将变量描述符与它们最终采用的名称相匹配。因此,要么所有变量的重命名都必须在源文件中完成,而不是在清理步骤中(不太理想),要么必须由文档引擎完成一些代码解析以跟踪变量名称的更改(啊!),或者一些应该使用更简单的混合,例如允许在标记文件中指定变量重命名。
如前所述,这不太合理。假设我取var1
和var2
,并创建var3
和var4
。也许var4
只是var2
对其分位数的映射,并且是和var3
的观察最大值;或者我可以通过截断极值来创建。如果我这样做,我是否保留var1
var2
var4
var2
var2
? 另一方面,如果您指的是简单地将“长名称”与“简单名称”(即文本描述符到 R 变量)匹配,那么这只有您可以做。如果您有非常结构化的数据,创建与变量名称匹配的文本名称列表并不难;或者,您可以创建可以执行字符串替换的标记。我认为创建将变量名称与描述符匹配的 CSV(或者,更好的是 JSON ;-))并不难。只需继续检查所有变量是否具有匹配的描述符字符串,并在完成后停止。
5.
理想情况下,报告也会被模板化(例如,“我们在 [日期] 从 [dset] 数据集中提取了 [var] 变量。”),并且可能链接到 Sweave。
这就是其他人的建议roxygen
可以roxygen2
适用的地方。
6.
该工具应该足够灵活,不会过于繁琐。这意味着最少的文档将只是一个数据集名称。
嗯,我被难住了。:)
(*) 顺便说一句,如果您想要一个与此相关的 FOSS 项目,请查看Taverna。如多个地方所述,它已与 R 集成。这对于您目前的需求可能有点过头了,但值得作为一个相当成熟的工作流系统的例子进行研究。
注1:因为我经常bigmemory
用于大型数据集,所以我必须为每个矩阵的列命名。这些存储在每个二进制文件的描述符文件中。该过程鼓励创建将变量名称(和矩阵)与描述符匹配的描述符。如果您将数据存储在数据库或其他支持随机访问和多 R/W 访问的外部文件中(例如内存映射文件、HDF5 文件、.rdat 文件以外的任何文件),您可能会发现添加描述符成为第二天性。