【发布时间】:2019-08-26 12:55:45
【问题描述】:
这里是R初学者,真的很怀念Python的
import pandas as pd
import my_file_which_is_just_a_file_not_a_package as mf
out = mf.my_cool_function()
我找到了一种实现类似于前者的方法(为包分配别名),但如何执行后者,即如何为.R文件(不是包)分配别名您正在导入? 例如您已将一些经常使用的函数放入单独的 .R 文件中,或者您将程序分成多个 .R 文件以保持整洁。
注意:这不是询问如何为包分配别名的问题的重复 - 我说的是单个 R 文件,而不是包。
我了解命名空间库为已安装的软件包提供了类似于 import as 的功能:
library(namespace)
registerNamespace('ggp', loadNamespace('ggplot2'))
data(iris)
ggp::ggplot(iris, ggp::aes(x = Petal.Length, y = Sepal.Length)) + ggp::geom_point()
我也知道您可以使用 import 仅从另一个 .R 文件中导入某些函数,例如从另一个脚本(不是包):
import::here(fun_a, fun_b, .from = "other_resources.R")
a <- fun_a(…)
最后,您可以使用source 加载另一个脚本。
但这些都没有解决我关于使用别名导入的观点。
编辑
因为有人问我,我正在尝试学习一些 R,因为:
- 我很好奇;我上次尝试 R 是在 tidyverse “革命”之前;当时我讨厌它,觉得它晦涩难懂,而且文档极差。每个人都在说 tidyverse 有多棒,所以我很想再试试 R
- 我不太可能将我的所有工作流从 Python 迁移到 R,但我可能希望在 R 中做某些事情。例如读取大型 Excel 文件并导出到 SQL;这两个任务在 R 中都快得多。我现在可以在很短的时间内将大型 xlsx 文件导入 SQL,然后让 Python 从 SQL 中读取,并保持我的工作流程的其余部分不变。我在here 发布了关于它的信息,我还解释了为什么 CSV 不是我的最佳选择(请不要回复说“使用 CSV”)。
【问题讨论】:
-
为什么需要这样做?只需导入包(它根本不会减慢您的系统速度),然后使用所需的任何功能。无需只导入
ggplot2的一部分。您安装、调用它,然后使用您需要的任何功能。对于包或文件,不需要别名 -
我不同意。没有别名,我如何确定没有名称冲突?如果在多个包中以不同方式实现相同的功能怎么办?即使没有冲突,调用 al.fun() 也是对 fun() 来源的有用提醒。请问您对其他语言的熟悉程度如何?我发现这个概念对于 R 和 Matlab 用户来说是陌生的(它们的命名空间实现很糟糕),而对于其他语言的用户来说似乎很常识。
-
顺便说一句,我的问题是关于 R 脚本,而不是包。在 Python 中,计算某些东西的函数可能在多个包中可用,有几次我在单独的文件(不是包)中构建了自己的版本。能够调用 this_package.calc()、that_package.calc()、myfile.calc() 然后比较结果对我来说非常有用。例如,我构建了一个特定的函数来解决一些数字问题,就我而言,这比常用的包要快得多。
-
@Pythonistaanonymous ;从链接中,我尝试类似:如果您的 R 函数存储在
temp中:txt = 'fun <- function(...) print("hello")' ; cat(txt, file=temp<-tempfile()),您可以将它们加载到环境source(temp, local = my_alias<-new.env())中。然后使用my_alias$fun()调用该函数。 (但我的 2c fwiw,只是把函数放在一个包中)
标签: r namespaces