在R中为对象的插槽创建别名

时间:2014-07-03 09:57:54

标签: r

我试图创建一个别名(也就是一个指针,或一个新的短昵称,指定内存中的同一个对象,而不复制该对象)试图创建一个复杂对象的子部分。假设我正在处理类SpatialPolygonsDataFrame(包“sp”)的对象,并且我想在其一部分上执行操作,深入到该对象的层次表示中。而不是像

那样反复写东西
myBigMap@polygons[FRA][[1]]@Polygons[[1]]

我希望能够简单地写

mypolygon

这样

myBigMap@polygons[FRA][[1]]@Polygons[[1]]@coords

可以缩写

mypolygon@coords

等。我已经看到我应该使用环境来替代前.Alias失效函数,但是无法找出如何告诉R我想将复杂对象的子部分视为环境。谢谢!

1 个答案:

答案 0 :(得分:2)

赋值:

 mypolygon=myBigMap@polygons[FRA][[1]]@Polygons[[1]]

在您修改其中的某些内容之前,不会创建副本。因此,如果它只是访问数据的简写以使某些代码更具可读性,那么这将是正常的:

 mypolygon@coords
 mean(mypolygon@coords[,1])

这些都不会复制。

但是,如果您确实修改了mypolygon,例如通过更改@coords,则需要将修改后的值放回结构中,因为复制了以下内容:

mypolygon@coords = mypolygon@coords * 1000
myBigMap@polygons[FRA][[1]]@Polygons[[1]] = mypolygon

我认为这是一个首选的解决方案,因为它与任何类型的魔术别名方案一样有效,并且因为没有神奇的动作在远处发生,所以它是显而易见的。

我不认为有任何方法可以像对待你想要的那样对对象的某些部分进行别名。