热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在R中加载太多库的不利之处是什么?

如何解决《在R中加载太多库的不利之处是什么?》经验,为你挑选了1个好方法。

我一直在从事一个相当大的研究项目,其中包含许多子部分。我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软件包可能会很方便,但是它降低了可维护性,并且与几乎任何其他编程社区中的既定实践背道而驰。


推荐阅读
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Inno Setup区段之Components篇相关知识详解
    本文详细介绍了Inno Setup区段之Components篇相关的知识,包括Components和Types的使用方式以及各个参数的说明,希望对读者有一定的参考价值。内容涵盖了ComponentsName、Description、Types、ExtraDiskSpaceRequired、ExtraDiskSpaceRequiredFlags等多个关键词,帮助读者更好地理解和应用Inno Setup区段之Components篇的知识。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
gsgtqlg_132
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有