如何在 R 中导入文件并为其命名
Posted
技术标签:
【中文标题】如何在 R 中导入文件并为其命名【英文标题】:How to import a file in R and give it a name 【发布时间】:2019-11-01 18:49:07 【问题描述】:我有一个如下所示的 R 类
source("data_validation.R")
data_validation.mymodel <- function(mymodel,newdata=list())
data_validation(newdata)
我有一个名为data_validation
的函数,我需要从另一个文件中调用另一个函数,该文件是同名文件。但它给了我一个错误,因为它具有相同的名称,所以在另一个文件中找不到该函数。如何在data_validation.R
文件中为我的函数设置别名,以便我可以轻松区分这两个函数(即类似于 python 的东西,我可以说 import data_validation as dv)
【问题讨论】:
“来自另一个文件的函数...同名” 除非它们被加载到不同的命名空间/环境中,否则不会发生。可以区分(例如)lag
和包stats
和dplyr
的原因是通过双冒号引用:stats::lag
与dplyr::lag
。如果将同名函数加载到命名空间中,则每次都会覆盖该命名空间中的旧版本。
双冒号仅适用于包,不适用于我使用源导入的文件,对吗?
是的,这就是为什么 source
ing from files 没有让您有机会在加载第二个时不覆盖。
所以在这种情况下没有选项?
我已经多次寻找模仿 python 的import pandas as pd
的解决方案,但什么都没有。
【参考方案1】:
只要你:
-
必须
source
文件,至少其中一个是正式的包;和
无法更改在这些源文件中定义的任何一个函数的函数名称,
您必须解决一些问题才能同时使用这两个功能。
这里有一个可能对你有用的技巧。
我从一个简单的文件开始,foo.R
,它只定义了一个函数:
myfunc <- function(x) x+1
在全局环境下,我加载测试一下:
source("~/Downloads/foo.R")
myfunc(2)
# [1] 3
但是假设我有另一个文件 (foo2.R
) 具有相同的功能:
myfunc <- function(x) x+1000
让我们围绕源代码编写一个包装器,只查找该函数:
wrap_source <- function(...) source(..., local = TRUE); environment();
ls(envir=wrap_source("~/Downloads/foo2.R"))
# [1] "myfunc"
other <- wrap_source("~/Downloads/foo2.R")
myfunc(1)
# [1] 2
other$myfunc(1)
# [1] 1001
【讨论】:
有什么想法吗,HHH?我知道这并不能真正解决您当前的问题,但我不知道有任何构造允许这样做而不涉及显式的模块/包式命名空间。以上是关于如何在 R 中导入文件并为其命名的主要内容,如果未能解决你的问题,请参考以下文章