Можно ли передать ссылкой с "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"
действительно ли это возможно?
Нет .
Объекты в операторах присваивания неизменяемы. 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 под названием R.oo , который позволяет имитировать поведение передачи по ссылке; R.oo доступен на CRAN .
Передача по ссылке возможна для среды
s. Чтобы использовать их, в основном всякий раз, когда вы создаете объект, вам также нужно будет создать слот среды. Но я считаю, что это громоздко. Взгляните на
Пропустить по ссылке для S4. и Указатели и переход по ссылке в R