相关疑难解决方法(0)

确保R环境中的重现性

我在计算生物学实验室工作,在那里我们有几个人从事多个项目,主要是在R(这是我关心的这篇文章).在过去,人们只需为每个项目开发代码,这些代码可能涉及也可能不涉及从先前项目复制的样板代码.多年来我推动的一件事就是为这个混乱带来一些集中式结构,并让人们识别出常见的模式,这样我们就可以将这些重复/共同的代码块转换成包,因为人们可能会认为这是很多原因.一件好事.所以现在我们的人们在他们的项目特定脚本中使用了集中的包/例程.

这里有一个问题.我们拥有权力的授权,即每个项目的每个脚本都需要尽可能100%可重复(这包括我们可以直接访问的所有代码的100%,包括我们的包).也就是说,如果我在包条中使用参数A调用函数foo来获取结果X,那么4年后我应该得到完全相同的结果.(由于错误导致的错误输出在这里除外)

可重复性的主题现在在各个圈内的R中出现,但通常似乎在过程的再现性(例如,晕影)方面进行讨论.这不是一回事 - 我今天可以运行一个小插图然后在6个月后使用更新的包运行相同的代码并获得截然不同的结果.

已经达成一致的解决方案(我不是其中的粉丝)是,如果需要在非向后兼容的更改中更改函数或包,则只需获取新名称.因此,如果我们需要从根本上改变函数foo(),它将被称为foo2(),如果需要彻底改变,它将被称为foo3().这可以确保调用foo()的任何脚本始终获得原始结果,同时允许事物在包存储库中前进.它确实有效,但我真的不喜欢这个 - 它在美学上看起来非常混乱,我担心随着时间的推移它会导致包裹bar,bar2,bar3,bar4 ...函数foo1,foo2,foo3等的大规模混乱.

问题是我没有提出一个更好的替代解决方案.一种可能性是注意软件包的版本号,R等,并确保加载它们,但这有多个问题 - 其中最重要的是它依赖于正确的软件包版本规则并且容易出错.此外,这种替代方案已被拒绝;)理想情况下,我们所拥有的是某种开发和释放的概念,因为大多数这些变化往往更早发生,然后平稳发生变化的频率更低.OTOH devel在这里真正意味着"实际上并不是在一个包中"(我们这样做),但很难确切地确定在什么时候运送东西是正确的.当你认为自己安全的那一刻,那就是你认识到的那一刻

所以考虑到所有这些,我很好奇是否有其他人处理过类似情况,以及他们如何解决问题.

编辑:只是为了清楚,通过非向后兼容,我不只是谈论API等,而是输出给定的一组输入.

r

26
推荐指数
4
解决办法
715
查看次数

重新排序因子会产生不同的结果,具体取决于加载的包

我想创建一个条形图,其中条形按高度排序,而不是按类别按字母顺序排列.当我加载的唯一包是ggplot2时,这工作正常.但是,当我加载一些包并运行创建,排序和绘制数据框的相同代码时,条形图已经恢复为按字母顺序排序.

我每次使用都检查了数据帧str(),结果发现数据框的属性现在不同了,即使我每次都运行相同的代码.

我的代码和输出如下所示.任何人都可以解释不同的行为吗?为什么加载一些显然不相关的包(在我所使用的所有函数似乎都没有被新加载的包掩盖的意义上无关)会改变运行transform()函数的结果?

案例1:刚加载ggplot2

library(ggplot2)

group = c("C","F","D","B","A","E")
num = c(12,11,7,7,2,1)
data = data.frame(group,num)
data1 = transform(data, group=reorder(group,-num))

> str(data1)
'data.frame':   6 obs. of  2 variables:
 $ group: Factor w/ 6 levels "C","F","B","D",..: 1 2 4 3 5 6
  ..- attr(*, "scores")= num [1:6(1d)] -2 -7 -12 -7 -1 -11
  .. ..- attr(*, "dimnames")=List of 1
  .. .. ..$ : chr  "A" "B" "C" "D" ...
 $ num  : num  12 11 7 7 2 1 …
Run Code Online (Sandbox Code Playgroud)

namespaces r masking operator-precedence

18
推荐指数
1
解决办法
870
查看次数

Roxygen 导入/依赖的最佳实践?

我正在编写一个用于访问私有 API 的小型便利包,并且正在使用httr函数来处理请求。我还使用 Roxygen 来处理文档等。我正在导入httr这样的函数:

#' Get a page of data from the specified endpoint.
#' @keywords internal
#' @importFrom httr GET
#'
get_data <- function(url, headers, page_number) {
  # Add querystring for page
  url_with_page <- paste0(url, "?page=", page_number)
  message("Downloading: ", url_with_page)
  # Get API response
  response <- GET(url_with_page, headers)
  return(response)
}
Run Code Online (Sandbox Code Playgroud)

但是,当您尝试在没有预加载包的情况下运行包时,出现命名空间错误:

Error in get_data(url, headers, 1) : 
  could not find function "GET"
Run Code Online (Sandbox Code Playgroud)

我通常会尊重哈德利在这类事情上的专业知识,但这是否是使用该Depends领域以及/而不是使用该领域的好案例Imports

编辑:我的 NAMESPACE …

r roxygen

6
推荐指数
0
解决办法
4430
查看次数

标签 统计

r ×3

masking ×1

namespaces ×1

operator-precedence ×1

roxygen ×1