作者:gsgtqlg_132 | 来源:互联网 | 2023-01-29 21:46
我一直在从事一个相当大的研究项目,其中包含许多子部分。我R
为每个子部分创建了一个脚本,所以我不会因一个单一的脚本而迷路。
我的问题是,在像这样的大型项目中加载库的最佳实践是什么?
我要做的是:我没有在每个子部分的开头调用特定的库,而是创建了一个单独的脚本,该脚本加载了整个项目所需的所有库,并在每个子部分的开头调用了此脚本。 。
发生的情况是,有时我正在处理不需要的项目子部分,例如ggplot2
某些其他库。加载许多库的不利之处R
在于您不必使用那一刻?
这是我LoadPackages.R
脚本的一小部分。请注意,此脚本旨在用于与其他用户共享的项目中,因此,我认为确保正确安装所有库很重要:
# List of packages to install
list.of.packages <- c("sp", "rgeos", "ggplot2", "data.table", "rgdal", "dplyr",
"magrittr", "spatialEco", "geosphere", "readr")
# Only install packages not installed yet
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
# Load packages
library(sp)
library(rgeos)
library(ggplot2)
library(data.table)
library(dplyr)
library(magrittr)
library(readr)
library(spatialEco)
library(geosphere)
library(rgdal)
# clean global env.
rm(new.packages, list.of.packages)
gc(reset = T)
在每个工作会话的开始,我通过运行以下命令加载所有库:
source("./R scripts/LoadPackages.R")
Konrad Rudol..
5
有很多缺点。按照严重性的高低顺序:
这使得推理代码变得更加困难。代码很复杂。因此,健壮的代码应 尽可能简单。这是软件工程中公认的事实,也是常识。其中一个重要部分是限制程序中任何给定点处可见的符号数量:如果在状态X处可见1000个符号,这意味着为了证明关于状态X的事物(=知道什么是在X上进行),我需要推理多达1000个符号及其相互作用。这显然是不可能的。因此,虫子会潜入。
相关地,加载和附加许多软件包会导致名称冲突,因为不同的软件包将使用相同的名称。这本身不是问题,而只是语言工作方式的自然结果:良好的标识符有时会应用于不同的领域。不幸的是,R在处理来自不同程序包的相同标识符方面非常不好。最好不要让情况出现。
为什么我需要再次使用软件包X?我可以向您保证,在项目的某个时刻,您将加载不再在代码中的任何地方使用的软件包。
加载程序包可能很慢。仅此一个原因应该是仅加载所需软件包的原因。我不知道您正在使用的所有软件包,但是某些软件包(尤其是在Bioconductor中)可能最多需要10秒钟才能加载。
通常,我强烈建议不要不必要地加载软件包。出于同样的原因,我也不喜欢‹tidyverse›软件包:对于交互式探索而言,一次性加载所有tidyverse软件包可能会很方便,但是它降低了可维护性,并且与几乎任何其他编程社区中的既定实践背道而驰。
1> Konrad Rudol..:
有很多缺点。按照严重性的高低顺序:
这使得推理代码变得更加困难。代码很复杂。因此,健壮的代码应 尽可能简单。这是软件工程中公认的事实,也是常识。其中一个重要部分是限制程序中任何给定点处可见的符号数量:如果在状态X处可见1000个符号,这意味着为了证明关于状态X的事物(=知道什么是在X上进行),我需要推理多达1000个符号及其相互作用。这显然是不可能的。因此,虫子会潜入。
相关地,加载和附加许多软件包会导致名称冲突,因为不同的软件包将使用相同的名称。这本身不是问题,而只是语言工作方式的自然结果:良好的标识符有时会应用于不同的领域。不幸的是,R在处理来自不同程序包的相同标识符方面非常不好。最好不要让情况出现。
为什么我需要再次使用软件包X?我可以向您保证,在项目的某个时刻,您将加载不再在代码中的任何地方使用的软件包。
加载程序包可能很慢。仅此一个原因应该是仅加载所需软件包的原因。我不知道您正在使用的所有软件包,但是某些软件包(尤其是在Bioconductor中)可能最多需要10秒钟才能加载。
通常,我强烈建议不要不必要地加载软件包。出于同样的原因,我也不喜欢‹tidyverse›软件包:对于交互式探索而言,一次性加载所有tidyverse软件包可能会很方便,但是它降低了可维护性,并且与几乎任何其他编程社区中的既定实践背道而驰。