You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中提取函数变量并确定其所属环境的实现方案

问题:列出函数体变量及其所属环境

示例场景

以下是包含自定义环境变量的函数示例:

g2 <- function() {
  print(cc)
  print(dd)
  print(ee)
}

e <- new.env(parent = globalenv())
e$cc <- "Hello from the new environment"
e$dd <- "Hello from the new environment2"
environment(g2) <- e
e2 <- new.env(parent = globalenv())
e2$dd <- "Hello from the new environment"
e2$ee <- "Hello from the new environment2"
environment(g2) <- e2

当前进展

已完成以下步骤:

  • 提取函数中的变量:symbols <- c("cc","dd","ee")
  • 获取当前环境中的所有自定义环境:envirs <- ls()[sapply(ls(), function(x) is.environment(get(x)))]
  • 检查每个变量在各环境中的存在性,得到矩阵xin:
xin <- sapply(envirs, function(x) sapply(symbols, function(y) exists(y,get(x))))

输出结果:

> xin
       e    e2
cc  TRUE FALSE
dd  TRUE  TRUE
ee FALSE  TRUE

各环境的标识:

> e
<environment: 0x00000127b2a1e1a8>
> e2
<environment: 0x00000127b2a20988>

期望输出

希望得到如下格式的结果:

Symbol            Definition
1     cc <environment: 0x00000127b2a1e1a8>
2     dd <environment: 0x00000127b2a1e1a8>, <environment: 0x00000127b2a20988>
3     ee <environment: 0x00000127b2a20988>

解决方案(Base R实现)

通过遍历变量匹配对应环境,拼接环境标识字符串即可实现:

# 遍历每个变量,获取其存在的环境的字符串标识
env_str_list <- lapply(symbols, function(sym) {
  # 筛选当前变量存在的环境名称
  target_envs <- envirs[xin[sym, ]]
  # 转换环境为字符串格式
  sapply(target_envs, function(env_name) capture.output(print(get(env_name))))
})

# 拼接每个变量的环境字符串
definitions <- sapply(env_str_list, function(x) paste(x, collapse = ", "))

# 生成目标数据框
result_df <- data.frame(
  Symbol = symbols,
  Definition = definitions,
  row.names = NULL
)

print(result_df)

运行上述代码即可得到期望的输出格式。


内容的提问来源于stack exchange,提问作者KacZdr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:50:13