问题标签 [reproducible-research]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
442 浏览

r - 管理包中敏感数据的最佳方法是什么?

R CMD check我使用医疗数据,更喜欢在包环境中开发分析,利用testthatdevtools.

典型的分析将从从数据库中提取数据开始(通常有很长的连接和很多行,所以这不是一个简单的步骤)。

我的主要目标是保护健康信息,同时实现可重复的分析。尽管我可以对数据进行去识别化,但我仍然担心存在许多潜在的识别信息,即使它已被正式去识别化。因此,我甚至会非常小心地处理去识别化的数据。每次分析的数据约为 100 到 500Mb。

将数据放在data包中的目录中似乎是最糟糕的解决方案:数据很大,导致包创建缓慢;它是静态的,当查询随着时间的推移而变化时;并且当我不想传输受保护的数据时,仅共享代码变得更加困难。

我已经尝试过R.cache,和在 markdown 文档中memoise使用缓存块。knitr

R.cache现在看起来最好,但会在主目录中转储大量名称不明的数据。memoise不够灵活,并且对于临时缓存计算而不是数据库查询似乎要好得多。knitr缓存适用于降价,但不适用于直接交互式 R 使用。

对于具有中等大量受保护数据的基于打包的分析,是否有人有任何其他建议或建议?

0 投票
0 回答
102 浏览

emacs - 以源代码为主要媒介的可重复研究的替代方法

TL;博士:

可重复研究的通用动态文档(IPython 笔记本风格)方法通常不会产生可重用的源代码模块。是否有使用源代码作为主要媒介并在其中包含文本以使代码更可重用的工具/方法?

常见动态文档方法的问题

我真的很喜欢使用动态文档/笔记本进行可重复研究的概念。特别是在数据研究和分析中,它很有意义,因为它可以方便地记录和评论分析过程。我通常使用 Emacs Org-mode 和/或 IPython notebooks/kernels,它集成得很好。我还查看了 R 及其类似物(ESS、knitr)。

但是,通常这些文档由一系列代码块组成,这些代码块预计将按顺序执行。当纠结(源代码提取)时,生成的源代码通常不容易作为模块或库重用。

然而我经常想“哦,我希望我可以使用我几天前所做的分析的特定部分”。通常情况下,由于隐含的依赖关系,我必须在有趣的部分之前执行大部分单元格。仅包含编织文档的特定部分通常也不容易。即使是(使用 Org-mode 的#+INCLUDE指令或 LaTeX catchfilebetweentags),通常不同的段落也不是独立的。当然,我可以只复制和编辑之前的分析文档,然后复制/粘贴/传输相关部分。但这有点违背了目的。

总结一下:

常见的动态笔记本方法鼓励“线性”代码开发风格,即按顺序执行的代码块和遵循通常线性叙述的文本段落,因此通常不是独立的。这通常会导致难以重用的缠结代码和编织(文本文档输入)文本文档。

寻找可能的解决方案

以下是我迄今为止提出的解决这些问题的一些想法。

源代码作为主要媒介

经过一段时间后,我得出结论,上述问题源于散文/文本文档是主要媒体。这种带有偶发图形和表格的文本文档本质上是对某些叙述的线性描述。我认为这就是鼓励“过于线性”风格的原因。

如果源代码是主要媒介,那么不同的声明/定义可以从一开始就模块化,并且它们的文档/解释可以是独立的。然后,主文档可以根据所需的叙述仅选择相关部分。在某些方面,这与在 Python 中使用文档字符串以及使用 Sphinx 提取和处理文档字符串的方式非常接近。绘图、表格和值生成序列可以是测试套件或示例代码的一部分。

然而,与普通方法相比,这种方法限制了交互性。大多数交互式工作将在创建和调试单元测试或示例时完成。并不是说鼓励编写单元测试和示例是一件坏事,但它可能比 IPython 中的快速测试/原型设计要慢。另一方面,它会更加一致,也许更易于管理。

使用 noweb 的力量“非线性”文学编程风格

文学编程密切相关,但不鼓励这种“过于线性”的方法,例如 noweb 样式引用使得不太“线性”和更模块化的样式很可能。但它并不鼓励它。

但是,它通常只有在完全缠结的情况下才能正常工作。此外,它不适合交互式使用。此外,散文块不能像代码块那样被引用,所以文本方面仍然是“线性的”。

我的问题

  • 有没有人使用这种以源代码为主要媒介的方法?
  • 有没有人使用这种方法成功地在新的报告中重复使用以前的报告?
  • 或者“非线性” noweb 的力量是要走的路吗?
0 投票
2 回答
97 浏览

git - 是否可以完全更改存储库中文件的 git 时间戳?

我试图弄清楚一个 git 版本控制的文本文件存储库在理论上是否可以作为知识产权目的的纸质实验室笔记本替代品。

在纸质笔记本中,它的工作方式是你每天写下你的结果,然后你实验室里的一两个人在笔记上签字并划掉任何空白处。从理论上讲,这应该表明您对当天所做的事情有一个完美的记录,并且您不能在日期之后添加任何内容。

我认为这可以在 git 中实现的方式是通过将实验结果(即实验室笔记本)推送到 github 上的私有共享 repo 的 repo,并且......不知何故另外两个人检查了它?(关于如何做到这一点的建议?)

主要需要注意的是,是否有可能(如果是,需要运行什么代码)完全更改特定文本文件的内容和时间戳——而不在整个提交历史记录中留下痕迹?

0 投票
1 回答
454 浏览

r - 如何仅安装在特定 R 版本下制作的软件包版本?

我使用基于 R 3.2.2 的 Revolution R Enterprise 发行版。因此,我也有兴趣仅使用基于此 R 版本的软件包版本。检查像“检查点”或革命 MRAN 页面这样的包,我只找到了按日期访问 CRAN 快照的方法。有没有办法安装仍然与某个 R 版本兼容的最新软件包版本?

0 投票
0 回答
757 浏览

python - 用于 Python 中可重复研究的 Markdown

我想知道 Python 中是否有与 R-markdown 等效的东西可以帮助我进行可重复的研究。

请注意:我对 IPython Notebooks 作为答案不感兴趣

我想用 python 中的代码来享受 r-markdown 的语法乐趣。我知道可以engine="python"在 r-markdown 中提供并开始使用,但是当您想通过简单地将plt.show()where pltis alias to写入matplotlib.pyplot.

您是否知道 python 中可以帮助我实现这一目标的任何此类模块/工具?我想将此类工具与 Spyder / IntelliJ 一起使用。

我还希望类似的选项echo=FALSE出现在这样的工具中。

如果不存在这样的项目,那么你们知道有人/某个组织正在从事这样的事情吗?

0 投票
1 回答
58 浏览

r - 无法通过复制/输入功能创建可重现的示例

我试图dput()用一个大型数据库创建一个可重现的示例。数据库需要很大,因为可重现的示例涉及移动平均线。我发现这样做的方式涉及函数reproduce,在此处共享如何制作一个出色的 R 可重现示例?通过@Ricardo Saporta。reproduce基于dput()(此处的代码https://github.com/rsaporta/pubR/blob/gitbranch/reproduce.R)。

该代码创建data数据框,然后为其提供dput()输出。它使用rows参数输出完整的数据帧。然而,如果我使用这样的输出来重新创建数据框,它就会失败。

尝试将dput()输出分配给新的数据帧会导致代码不完整,需要我在最后手动添加三个括号。这样做之后,我收到以下错误消息:“视图错误:参数暗示不同的行数:100、61”。

请不要认为没有参数的dput()输出可以正常工作。它只是不输出完整的数据帧,而是输出它的一个样本。reproducerows = c(1:100)

另请注意,我使用 pastebin 方法创建了这个可重现的示例。该方法不能代替dput()我的目的,因为每当尝试导入某些列在单词之间有空格的数据时(例如带有日期时间戳的数据框),它都会失败。

编辑:经过进一步的故障排除后,当参数与包含4 列或更多列的数据框一起使用时,发现reproduce如上所述失败。将不得不寻找替代方案。rows

如果有人有兴趣对此进行测试,请使用以下链接运行上面的代码,所有链接都包含不同数量的列:

1)100x5:http ://pastebin.com/raw/xP1Zd0sC

2)100x4:http ://pastebin.com/raw/YZtetfne

3)100x4:http ://pastebin.com/raw/63Ap2bh5

4)100x3:http ://pastebin.com/raw/1vMMcMtx

5)100x3:http ://pastebin.com/raw/ziM1bYQt

6)100x1:http://pastebin.com/raw/qxtQs5u4

0 投票
1 回答
418 浏览

r - 在 R 中对图进行采样

我想通过制作 2 个数据框在 R 中制作一个有向图:一个用于顶点,一个用于边。此外,我的图表应该具有以下属性:

  • 没有圆圈(因此没有 A -> A)
  • 2个节点之间最多有1条边。

我想出了如下代码:

我的代码仍然允许 2 个节点(A -> B 和 B -> A)之间有 2 个边。我怎样才能在 A 和 B 之间实现只有 1 个边缘?

亲切的问候

编辑:我找到了一个解决方案: Unique rows, Considering two columns, in R, without order

我的完整代码:

0 投票
1 回答
25 浏览

docker - 在对我的应用程序的性能回归进行基准测试时,我可以使用虚拟化来控制主机性能的差异吗?

是否可以设置一个虚拟化环境(无论是 Docker 容器还是 qemu VM)来运行不受虚拟化主机性能影响的基准测试?

例如,无论实际硬件如何,我的计算基准的时钟始终约为 60 秒,可能以 CPU 节拍计,即使我将主机升级到 SSD 驱动器等,I/O 速度也将相同。

从我到目前为止所发现的情况来看,我会说上述情况是不可能的。因此,我怎样才能尽可能接近理想状态,以使我在虚拟化环境中完成的基准测试即使对于没有与我相同的硬件的人也是可重现的?

0 投票
1 回答
951 浏览

r - 为什么即使使用 set.seed(),mlr 在不同的运行中也会给出不同的结果?

要发布在包中获得的可重现结果,mlr应该使用该set.seed()函数来控制代码的随机性。

测试,似乎这种做法不会导致预期的结果,其中代码的不同运行会给出稍微不同的输出,例如在这个问题的来源和以下代码中报告。


这是一些可重现的代码

结果如下:

您可以看到不同的运行给出不同的数值输出。这在每个分类器中都是正确的,从最随机的到最小的。


我可以做些什么来确保可重复的结果?

0 投票
0 回答
69 浏览

r - 汇总由 R knitr 中的模板动态生成的结果

我正在使用knitr, 使用模板编写报告,该模板对多个数据集进行分析(MWE 的第 1 节)。

我可以通过将值分配给变量来生成结果摘要,然后将这些变量“拼接”到表格中(MWE 的第 2 节)。然而,这种方法既麻烦又不灵活(例如,为了改变表中出现的特定位需要大量输入)。

如何自动生成汇总表?

  • 报告正文 (MWE.Rnw):

    /li>
  • MWE.Rnw调用的模板(analysis-template.Rnw):

    /li>