为了账号安全,请及时绑定邮箱和手机立即绑定

可以在R中通过引用吗?

可以在R中通过引用吗?

守着星空守着你 2019-11-12 14:55:01
您可以通过引用加上“ R”吗?例如,在以下代码中:setClass("MyClass",    representation(    name="character"    ))instance1 <-new("MyClass",name="Hello1")instance2 <-new("MyClass",name="Hello2")array = c(instance1,instance2)instance1arrayinstance1@name="World!"instance1array输出是> instance1An 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"但我希望是> instance1An 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"可能吗 ?
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

没有。


赋值语句中的对象是不可变的。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

(附带条件:上面的陈述对R个原语,例如向量,矩阵)是正确的,对函数也是如此; 我不能肯定地说所有 R对象-包括大多数对象,以及大多数最常用的对象都适用。


如果您不喜欢这种行为,可以在R软件包的帮助下选择退出。例如,有一个名为R.oo的R包,它可以让您模仿按引用传递行为。R.oo在CRAN上可用。


查看完整回答
反对 回复 2019-11-12
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

正如一些人之前指出的,这可以通过使用class对象来完成environment。存在使用environments 建立的正式方法。它称为参考类,使您的工作变得非常简单。检查?setRefClass主条目帮助页面。它还描述了如何在引用类中使用形式方法。


setRefClass("MyClass",

    fields=list(

        name="character"

    )

)


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

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


array = c(instance1,instance2)


instance1$name <- "World!"

输出量

> instance1

Reference class object of class "MyClass"

Field "name":

[1] "World!"


> array

[[1]]

Reference class object of class "MyClass"

Field "name":

[1] "World!"


[[2]]

Reference class object of class "MyClass"

Field "name":

[1] "Hello2"


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 535 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信