从一个 .R 文件中获取对象名称

4

我可以从环境中获取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的对象列表名称。就像这样:
"func_1","func_2","func_3","c_1"

1
不错的问题,你可以通过将.R文件导入新的环境并从中获取对象名称 - https://dev59.com/pVkS5IYBdhLWcg3wn3--。 - pogibas
@PoGibas 我猜OP想要在不引用文件的情况下检索对象。 - ThomasIsCoding
非常感谢,您的回答简要地解决了我的问题! - SummersKing
2个回答

4
听起来像是一个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)中嵌套分配,您将需要编写一个递归函数来遍历解析树。


也许赋值运算符 -> 也可以考虑进去? - ThomasIsCoding
@ThomasIsCoding 你会惊讶于 as.list(parse(text = "3 -> a")) 返回的结果。 - Roland

2
感谢@PoGibas的解决方案,这正是我想要的。
my_env=new.env()
source("myfile.R",local=my_env)
ls(my_env)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接