【问题标题】:Get object names from a .R file从 .R 文件中获取对象名称
【发布时间】:2019-12-09 08:41:45
【问题描述】:

我可以从环境中获取 obj_name 列表,但是如何从 .r 文件中获取 obj_name 呢?

我尝试了 ls 但只是从环境中获取 obj_name,但我需要从 R 文件中获取,例如:

# filename test.R
func_1=function(){...}
func_2=function(){...}
func_3=function(){...}
c_1=R6Class()
#page end

我想获取test.R 的 obj 列表名称。 像这样:

"func_1","func_2","func_3","c_1"

【问题讨论】:

  • 好问题,您可以将source .R 归档到新环境并从那里获取对象名称 - stackoverflow.com/questions/39620669/…
  • @PoGibas 我猜 OP 想要在不获取文件的情况下检索对象
  • 非常感谢,您的回答简单地解决了我的问题!

标签: r


【解决方案1】:

听起来像是 xy 问题。无论如何,您可以解析文件并提取对<-= 的顶级调用的第一个参数:

na.omit(
  sapply(
    as.list(
      parse(text = 
      "# filename test.R
       func_1=function(){...}
       func_2=function(){...}
       func_3=function(){...}
       c_1=R6Class()
       #page end")), 
    function(x) if (as.character(x[[1]]) %in% c("<-", "=")) as.character(x[[2]]) else NA))
#[1] "func_1" "func_2" "func_3" "c_1" 

我假设您不使用 assign 或更奇特的赋值形式。如果您需要嵌套在其他函数中的赋值(例如iffor),则需要编写一个爬取解析树的递归函数。

【讨论】:

  • 也许分配-&gt;也可以考虑?
  • @ThomasIsCoding 你会对as.list(parse(text = "3 -&gt; a")) 返回的结果感到惊讶。
【解决方案2】:

感谢@PoGibas 的解决方案。 这就是我想要的

my_env=new.env()
source("myfile.R",local=my_env)
ls(my_env)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多