【问题标题】:R Program Version issueR程序版本问题
【发布时间】:2022-11-01 16:16:55
【问题描述】:

结果在版本 3.6 和 4.1 中有所不同。

我在 ubuntu server(18) 中的 R(3.6) 代码运行良好,但 ubuntu 20 R(4.1) 中的相同代码运行非常糟糕。 看看这个捕获 Issue with R Version

此代码的目的是通过除以总和来规范化列。

谢谢大家。

【问题讨论】:

  • 在 R 3.6 中,读入数据帧的字符向量默认被解释为因子。在 R 4.1 中,它们被保存为字符向量。您可以看到字符向量中元素周围引号的差异。如果要将列保留为因子变量,请在 R 4.1 中创建数据框的调用中包含 stringsAsFactor = TRUE
  • 您的代码已损坏,并且在 R 3.6 下可能会给出错误的结果。当迁移到 R 4.0 时,R 实际上改进了这种错误行为,因此它现在为您提供 NA,而不是误导、正确但错误的结果。
  • 图像不是发布数据或代码的好方法。请参阅 this Metarelevant xkcd。正确发布数据和代码,我会投票赞成什么是好的,重要的问题。

标签: r dataframe bioinformatics normalization r-table


【解决方案1】:

don't post code as an image。还建议发布reproducible example

无论如何,在 R 3.6 上的示例中,all_binsfactor。但是,在您的 R 4.1 示例中,all_bins 是一个 character 向量。

这是因为 R 4.0.0 中的 change

R 现在使用'⁠stringsAsFactors = FALSE⁠' 默认值,因此默认情况下不再将字符串转换为调用 data.frame() 和 read.table() 的因子。

为了在本地机器上重现服务器行为,当您在本地版本的 R 中读取 bins 时,您需要添加参数stringsAsFactors = TRUE,例如:

bins <- read.csv("path/to/file", stringsAsFactors = TRUE)

这应该可以解决这个特定问题。但是,您可能会在不同的机器上遇到 R 3.6 和 R 4.1 之间的其他差异。我建议在两台机器上运行相同版本的 R 和包,如果你想确保输出相同,可以使用renv

【讨论】:

  • 请注意,“renv”实际上并不能解决使用不同 R 版本的问题。它会警告不同的版本,但仅此而已。
  • 另外,请注意,仅包括 stringsAsFactors = TRUE,在恢复 R 3.6 行为的同时,实际上并不能修复代码中的错误,被 R 4.0 捕获。也就是说,按因子索引很少能达到预期的效果。在 R 3.6 下,代码很可能产生完全错误的结果。如果结果是正确的,那纯属偶然。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 2015-06-07
  • 1970-01-01
  • 2011-12-17
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多