如何导入.R文件并为其分配别名?就像将mf导入myfile.R

时间:2019-04-04 17:08:30

标签: r namespaces

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文件以保持整洁。

NB:这不是重复的问题,询问如何为包分配别名-我说的是单个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来加载另一个脚本。

但这都不满足我关于使用别名导入的观点。

有什么建议吗?谢谢!

编辑 PS自从被问到以来,我正尝试学习一些R,因为:

  • 我很好奇;我上次尝试R是在整洁的“革命”之前;当时我讨厌它,发现它晦涩难懂,奥秘,并且文档非常差。所有人都在说tidyverse多么美妙,所以我很好奇R再尝试一次
  • 我不太可能将所有工作流程从Python迁移到R,但是可能需要在R中做某些事情。这两个任务在R中都快得多。现在,我可以在很短的时间内将大型xlsx文件导入SQL,然后让Python从SQL读取,而其余工作流程保持不变。我在here上发布了该信息,并在其中解释了为什么CSV对我来说不是最佳选择(请不要再说“使用CSV”)。

1 个答案:

答案 0 :(得分:2)

听起来像您想要定义环境并向其中添加文件的声音。我发现sys.source对此很有用。

我有一个名为“ my_test_script.R”的示例文件,其中包含:

MYCONSTANT <- 3

testfun <- function(val){
  print(val)
}

testfun2 <- function(x){
  return(x + MYCONSTANT)
}

现在有一个示例会话,将文件读入环境,以便我可以将其中的信息“别名”为“ tstEnv”:

> tstEnv <- new.env()
> sys.source(file = "my_test_script.R", envir = tstEnv, toplevel.env = tstEnv)
> tstEnv$testfun("it works")
[1] "it works"
> tstEnv$testfun2(0) 
[1] 3
> tstEnv$testfun2(1)
[1] 4
> tstEnv$MYCONSTANT # I can read my constants too
[1] 3