繁体   English   中英

R 是否像 Python 一样具有点符号?

[英]Does R have dot notation like Python?

我目前正致力于将代码库从 R 转换、重构和优化到 Python。

R 代码库大量使用source() function。 据我了解,这类似于导入 python 文件。

在 python 中,我可以执行以下操作:
import我的文件
我的文件 some_function_or_variable_in_the_file

好像你不能在 R 中执行此操作,这意味着我必须查看source() function 中的 R 文件才能了解函数和变量。

此外,在没有::或的情况下从另一个文件调用 function 或变量似乎是不好的做法. 因为此语法在左侧指示文件源,在右侧指示变量或 function 名称。

当你在 R 工作室时,这可能不是什么大问题,但我在 Jupyter 实验室工作,负责 R 和 Python 的工作。 如果我不必总是查看我引用的文件,那就太好了。

在我的谷歌搜索中,我一无所获。 任何帮助或信息都会有所帮助。

source可以将 R 脚本导入到环境中,然后可以通过限定访问对象。

myfile <- environment()
source("myfile.R", myfile)

myfile$fun(x, y, z)  # call fun from myfile passing x, y and z
ls(myfile) # show what was sourced into the myfile environment

另请查看sys.source function,它提供了source的变体,还检查了 CRAN 上的框和导入包。

source()就像您将该源文件的代码放入相同的脚本/代码中一样。 源文件中的所有内容 - 都在同一个命名空间中 - 没有区别。 所以它不能与 Python 中的import相比较。而是在 Python exec(open('filename').read())或:

with open('filename') as f:
    exec(f.read())

R,到此为止,如果要有namespace,还得生成一个package。

将源文件定义为自己的命名空间

我还找到了 https://community.rstudio.com/t/is-it-dangerous-to-create-a-namespace-for-functions-in-a-script-without-a-package/91141

凡 function

source_as_ns <- function(namespace, file){
  ns <- namespace::makeNamespace(namespace)
  source(file, local = ns)
  base::namespaceExport(ns, ls(ns))
}

给出。

# script.R
foo <- function(x) x + 1

您可以致电:

source_as_ns("bar", "script.R")

bar::foo(1)
# 2

@G.Grothendieck 的答案也有效 - 但它的行为不太像 package,因为运算符是$而不是::

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM