가의가 보자 :XTS 할당
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
을 할당 한 다음 외부 데이터 테이블을 수정하는 경우, 객체 슬롯의 데이터 테이블뿐만 아니라 참조 수정 :
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
이 방법으로 객체 슬롯 안에 xts
객체를 할당하면 data.table
과 달리 슬롯과 외부 객체 사이의 연결이 끊어지는 것으로 보입니다.
xts
을 참조로 공유하는 것이 어떻게 든 가능합니까?
음, 재미있게, 감사합니다! 또한 새로운 태그'R6' 또는 뭔가 (아직 존재하지 않음)를 만들 정도로 충분한 평판을 얻었습니까? 그것이 제 질문에 추가 될 수 있습니까? –
@DanielKrizian r6 태그가 추가되었습니다. – agstudy
나는 할당 후에 메모리 주소가 바뀌는 것을 발견했다 :'A1 = address (p1 $ series $ x); p2 $ series $ x [ "1970-01-03"] <- 10; A2 = 주소 (p1 $ series $ x); same (A1, A2) # FALSE' 그러므로'xts'에 값을 쓰는 작업을하는 것은'data.table' 접근법에 비해 값이 비싸고 연산 속도가 느립니다 :'DT [a == 1, b : = 10]'? 어떤 데이터 구조를 사용해야한다고 생각하십니까 –