Dodawanie kolumny do obiektu Xts jest proste, jeśli znasz nazwę kolumny przed czasem. Na przykład, aby dodać kolumnę o nazwie „B”:Dynamicznie dodaj kolumnę do obiektu xts
n <- 5
x <- merge(xts(order.by = as.Date('2015-1-1') + 1:n), a = rnorm(n))
x$b <- rnorm(n)
Dodawanie dynamicznie nazwie kolumny (czyli kolumna którego nazwisko jest znane tylko w środowisku wykonawczym) jest trudniejsze:
new.col.name <- 'c' # known only at runtime
x[, new.col.name] <- rnorm(n) # this generates an error
Jedno podejście jest dodanie kolumny z tymczasową nazwą, a następnie zmiana jej nazwy:
stopifnot(!('tmp' %in% names(x)))
x$tmp <- rnorm(n)
names(x)[names(x) == 'tmp'] <- new.col.name
Czy istnieje lepszy sposób na zrobienie tego? (Czy przypisanie do obiektu names
obiektu Xts spowoduje utworzenie kopii obiektu? Na przykład, czy powyższe podejście zadziałałoby dobrze, gdyby n
było bardzo duże?)
Jak już powiedziałem w mojej odpowiedzi, ustawienie "colnames" powoduje tworzenie kopii. Na przykład: 'x <- .xts (1,1); tracemem (x); colnames (x) <- "hi" ' –
Edytowałem, podczas dodawania tego komentarza @JoshuaUlrich Faktyczne dane macierzy nie są kopiowane, czy to prawda? –
Rzeczywiste dane matrycy są niestety kopiowane. Dodałem trochę szczegółów do mojej odpowiedzi, aby zademonstrować. –