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

为何在函数内为R对象设置的属性在返回后消失?

问题原因解析

这是R的两个核心机制共同作用的结果:

  • 不可变对象特性:字符串属于R里的原子向量类型,这类对象是不可变的。当你执行attr(foo, "qux") <- "quo"时,并不是直接给全局的foo添加属性,而是创建了一个带有qux属性的foo副本。
  • 局部作用域规则:函数内部默认会把这个新的副本存放在函数自己的局部环境里,不会对全局环境中的原始foo产生任何影响。所以函数内部打印的是局部副本的属性值,函数执行结束后局部环境被销毁,全局的foo自然还是原来的样子。

如果要真正修改全局的foo,可以用全局赋值操作符<<-,或者直接指定全局环境:

foo <- "foo"
(function () {
  # 方式1:用<<-修改全局变量
  foo <<- `attr<-`(foo, "qux", "quo")
  print(attr(foo, "qux"))
})()
print(attr(foo, "qux")) # 现在会输出"quo"

或者:

foo <- "foo"
(function () {
  # 方式2:直接操作全局环境中的对象
  attr(get("foo", envir = .GlobalEnv), "qux") <- "quo"
  print(attr(foo, "qux"))
})()
print(attr(foo, "qux"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:58:54