如何在R

时间:2019-09-15 07:06:04

标签: r

让我说我有以下代码:

mylist <- (1,2,3)
Somelist <- (A,B,C)

如何将mylist本身的名称更改为Somelist[[1]] 因此从现在开始,我可以使用mylist而不是A来调用/修改mylist

或者,我不介意找到一种使用Somelist[[1]]作为我可以附加到mylist的名称的方法。

1 个答案:

答案 0 :(得分:0)

R与其他对象(例如Python)的处理方式不同。例如,在Python中,您可以创建一个对象并为其命名。然后,您可以将另一个名称链接到该名称。这两个名称现在都指向同一对象,并且可以互换使用。

>>> mylist = [1,2,3] # create object
>>> A = mylist # point a new name to it
>>> A[0] = 99  # modify it in place
>>> mylist     # see what happens

[99, 2, 3]     # either name will change the same object

R最初执行相同的操作。但是,当您使用其中一个名称修改对象时,该对象将被复制而不是就地修改。其他名称仍指向原始对象。名称不再可互换。

例如见下文。我们创建一个对象,然后为其指定一个新名称。但是在更改对象时,会在内存中创建一个新副本(因为R知道有两个名称指向它)。但是,只有我们用来实现更改的名称现在指向新副本。其他名称仍指向原始名称:

library(pryr) # get memory locations

mylist <- c(1,2,3)

pryr::address(mylist)
[1] "0x7fddbc010008" # the object is here in memory

A <- mylist
pryr::address(A)
[1] "0x7fddbc010008" # this name points to the same object

mylist[1] = 99
address(mylist)
[1] "0x7fddbb675478" # object copied to a new location

address(A)
[1] "0x7fddbc010008" # still points to the original

因此在R中,拥有多个指向同一对象的名称似乎并不像其他语言那样就地修改了该对象,而所有语言仍指向同一对象。 这将很难实现您想在问题中要做的事情。

请参阅此处的指南以获得更好的解释:

http://adv-r.had.co.nz/memory.html