R等价的Python`从x import y as z`

eme*_*hex 17 r

在python中,我可以加载特定的功能或功能:

from x import y as z

我怎样才能在R中复制这个?

举例来说,我想加载只是count从功能plyr,而不是用装载整个包library(plyr)

Jos*_*ich 19

我可能只是这样做count <- plyr::count,所以我不必费心确保我的论点正确.

如果未安装plyr,您可能希望将该定义包装在if语句中:

if (requireNamespace("plyr"))
    count <- plyr::count
else
    stop("plyr is not installed.")
Run Code Online (Sandbox Code Playgroud)

您也可能对导入和/或模块包感兴趣,它们为R提供类似python的导入/模块机制.


还听取来自警告添加新的仿制药部分写作R附加软件(原文中强调):

本手册的早期版本建议进行分配foo.default <- base::foo.这不是一个好主意,因为它在[package]安装时捕获基本功能,并且可能会在R被修补或更新时更改.

因此,count <- plyr::count如果在您正在编写的脚本中定义它,则可以使用语法source,但是如果在包中执行此操作,则应明确定义新函数并指定所有参数.

  • @dimitris_ps:你可以,但我想的是我的代码将包含在其他一些函数中的情况,在这种情况下我不希望它下载东西. (3认同)

eme*_*hex 10

from plyr import count as count 可能看起来像这样:

count <- function(x) {
    plyr::count(x)
}
Run Code Online (Sandbox Code Playgroud)

简化:

count <- plyr::count
Run Code Online (Sandbox Code Playgroud)

更完整:

if (requireNamespace("plyr")) 
    count <- plyr::count
Run Code Online (Sandbox Code Playgroud)

编辑:

我受@ eipi10评论的启发.我没有意识到::
感谢@Joshua Ulrich的建议!

  • 我可能只是做`count < - plyr :: count`,所以我不必费心去确保我的参数正确.如果未安装plyr,您可能希望将该定义包装在if语句中:`if(requireNamespace("plyr"))count < - plyr :: count`. (4认同)

TAR*_*man 6

R中没有直接等效的功能,但正如其他答案所述,您可以获得类似的结果.

library参数既加载包命名空间,又将附加到搜索列表中.正如Joshua Ulrich所指出的,可以加载包命名空间而不命名空间附加到搜索列表.使用library实际调用loadNamespaceattachNamespace.

负载附加的区别最好由具有丰富的软件包开发专业知识的人解释(前面提到过Ulrich先生的想法)所以我建议Hadley Wickham 在这篇关于命名空间的文章中进一步阅读.

值得注意的是,您可以使用pos参数library()来定义附加包命名空间的位置,如库语句文档中所述.

  • 这不是真的.包裹*完全附加*或*未连接*到搜索路径,但不必附加它们即可使用.可以在不附加的情况下加载包命名空间. (3认同)