gpt4 book ai didi

r - xts 通过引用赋值

转载 作者:行者123 更新时间:2023-12-01 03:47:01 25 4
gpt4 key购买 nike

让我们:

library(R6); library(data.table); library(xts)
Portfolio <- R6Class("Portfolio",
public = list(name="character",
prices = NA,
initialize = function(name, instruments) {
if (!missing(name)) self$name <- name
}
))

p = Portfolio$new("ABC")
DT = data.table(a=1:3, b=4:6)
X = xts(1:4, order.by=as.Date(1:4))

如果我们分配一个 data.table进入object slot然后修改外部数据表,object slot中的数据表也是通过引用修改的:
p$prices = DT
p$prices
DT[a==1,b:=10] # modify external table
p$prices # verify that the slot data is modified by reference

让我们用 xts 做一个类似的实验:
p$prices = X
p$prices
X["1970-01-03"] <- 10 # modify the external xts
p$prices # observe that modification didn't take place inside the object

分配 xtsdata.table 不同,对象槽内的对象以这种方式似乎打破了槽和外部对象之间的链接。 .

是否有可能实现 xts通过引用共享?

最佳答案

在这里,您展示的内容与 data.table 分配行为真正相关,并且在任何情况下都与 R6 类相关。实际上,data.table 分配是通过引用完成的(独立于在 R6 字段中复制)或仅复制 xts 对象。

您是否希望创建一个 xts 对象作为所有 Portofolio 对象之间的共享对象?

这里有一个例子:

    XtsClass <- R6Class("XtsClass", public = list(x = NULL))
Portfolio <- R6Class("Portfolio",
public = list(
series = XtsClass$new()
)
)

p1 <- Portfolio$new()
p1$series$x <- xts(1:4, order.by=as.Date(1:4))

p2 <- Portfolio$new()

p2 和 p1 共享同一个 xts 对象。现在,如果您在 p2 中修改它,您将在 p1 中得到 smae 修改,因为 series 是在 R6 对象的所有实例之间共享的引用对象。
    p2$series$x["1970-01-03"] <- 10

p1$series$x
[,1]
1970-01-02 1
1970-01-03 10 ## here the modification
1970-01-04 3
1970-01-05 4

关于r - xts 通过引用赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com