Добавление столбца в объект xts является простым, если вы знаете имя столбца раньше времени. Например, чтобы добавить столбец с именем «Ъ»:Динамическое добавление столбца в объект xts
n <- 5
x <- merge(xts(order.by = as.Date('2015-1-1') + 1:n), a = rnorm(n))
x$b <- rnorm(n)
Добавление динамически с именем столбца (т.е. столбец, имя которого известно только во время выполнения) сложнее:
new.col.name <- 'c' # known only at runtime
x[, new.col.name] <- rnorm(n) # this generates an error
Один подход заключается в том, чтобы добавить столбец с временным именем и затем переименовать его:
stopifnot(!('tmp' %in% names(x)))
x$tmp <- rnorm(n)
names(x)[names(x) == 'tmp'] <- new.col.name
Есть ли лучший способ сделать это? (Кроме того, не приписывая names
найденного объекта XTS в экземпляре объекта делается? Так, например, будет Изложенными выше подход хорошо работать, если n
были очень большими?)
Как я уже сказал в своем ответе, установка 'colnames' создает копии. Например: 'x <- .xts (1,1); tracemem (х); colnames (x) <- "hi" ' –
Я редактировал, а вы добавили этот комментарий @JoshuaUlrich. Фактические данные матрицы не копируются? –
Фактические данные матрицы копируются, к сожалению. Я добавил некоторые детали к моему ответу, чтобы продемонстрировать. –