导入R中的函数

时间:2016-09-10 05:44:35

标签: r function import

在Python中,我们有机会从库中导入某个函数,并使用命令“import function 作为smth 。”我们在R中有类似的东西? 我知道我们可以像“ library :: function ()”那样调用函数,我的问题主要是指“as”部分。

1 个答案:

答案 0 :(得分:3)

在R中执行此操作并不常见,也不是必需的。赋值运算符<-可用于为现有函数指定新名称。例如,可以定义一个与lubridate,year()函数完全相同的函数:

asYear <- lubridate::year

有人可能会说,通过这样做,year()功能已被&#34;导入&#34;来自lubridate包,现在称为asYear()。事实上,新功能也是如此(这并不奇怪,因为 相同):

asYear(Sys.Date())
#[1] 2016

因此可以构建一个类似于&#34;从包导入为&#34;,但这样做并不是一个好主意。以下是我能想到的几个原因:

  • 调试已重命名库函数的代码 更难。
  • 该文档不适用于重命名的函数。在此示例中,与?asYear?lubridate::year相比,library(lubridate); help(year)无法正常工作。
  • 该功能不仅被重命名,而且被复制,这使得环境变得混乱,并且在内存使用方面效率低下。
  • 代码的维护变得不必要地困难。如果另一个程序员(或几年后的原始程序员)查看包含这样一个函数重新定义的代码,那么她或他将更难理解这个函数在做什么。

可能有更多原因,但我希望这足以阻止使用这种结构。不同的编程语言具有不同的特性,作为程序员,有必要适应它们。 Python中常见的东西在R中可能很尴尬,反之亦然。

在R中处理这种标准情况的一种简单而常用的方法是使用library()加载包含所请求函数的包的整个命名空间:

library (lubridate)
year(Sys.Date())

但是,应该知道可能的命名空间冲突,特别是如果同时加载了许多库。可以在不同的包中使用相同的名称定义不同的功能。其众所周知的示例是lag()dplyr包中的stats函数的对比实现。 在这种情况下,可以使用双冒号运算符::来解析应该解决的命名空间。这类似于使用&#34;来自&#34;在&#34; import&#34;的情况下,但每次调用函数时都需要这样的规范。

lubridate::year(Sys.Date()) 
#[1] 2016