你能用"R"通过引用传递吗?

setClass("MyClass",
    representation(
    name="character"
    ))


instance1 <-new("MyClass",name="Hello1")
instance2 <-new("MyClass",name="Hello2")

array = c(instance1,instance2)

instance1
array

instance1@name="World!"

instance1
array

输出是

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "Hello1"


[[2]]
An object of class “MyClass”
Slot "name":
[1] "Hello2"

但我希望是这样

> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"

> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "World!"


[[2]]
An object of class “MyClass”
Slot "name":
[1] "Hello2"

可能吗?

推荐答案

No

赋值语句中的对象是不可变的.R将复制对象而不是参考.

> v = matrix(1:12, nrow=4)
> v
           [,1] [,2] [,3]
     [1,]    1    5    9
     [2,]    2    6   10
     [3,]    3    7   11
     [4,]    4    8   12
> v1 = v
> v1[,1]     # fetch the first column 
     [1] 1 2 3 4

(proviso:上述陈述适用于R primitives,例如向量、矩阵),也适用于functions;我不能确定这是否适用于allR物体——只是其中的大多数,以及大多数最常用的物体.)

如果你不喜欢这种行为,你可以在R软件包的帮助下 Select 退出.例如,有一个名为R.oo的R包,允许您模拟通过引用传递的行为;R.oo在CRAN上有售.

R相关问答推荐

如何在弹性表中为类别值的背景上色

混淆矩阵,其中每列和等于1

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

R等效于LABpascal(n,1)不同的列符号

在特定Quarto(reveal.js)幻灯片上隐藏徽标

使用tidy—select创建一个新的带有mutate的摘要变量

根据多个条件增加y轴高度以适应geom_text标签

在for循环中转换rabrame

Rplotly中的Sankey Diagram:意外连接&

R—将各种CSV数字列转换为日期

使用R中的正则表达式将一列分割为多列

减go R中列表的所有唯一元素对

以不同于绘图中元素的方式对GG图图例进行排序

从线的交点创建面

填充图例什么时候会有点?

TidyVerse中长度不等的列结合向量

如何获取R chromote中的当前URL?

使用一个标签共享多个组图图例符号

通过比较来自多个数据框的值和R中的条件来添加新列

对一个数据帧中另一个数据帧中的值进行计数