【发布时间】:2019-12-31 00:15:28
【问题描述】:
我有几个带有股市数据的xts 对象。我正在尝试从 TTR 包中添加变化率 (ROC),但我想编写一个函数来做到这一点。
它以“冗长”的方式工作,但不知何故,该函数无法解决问题:
#Loading the data
library(xts)
library(quantmod)
library(ggplot2)
library(tidyquant)
library(Hmisc)
library(PerformanceAnalytics)
library(TTR)
StartDate <- "2017-01-01"
# Get data from yahoo finance
symbolsYahoo <- c("^FTSE", "^GDAXI")
loadSymbols(Symbols = symbolsYahoo, from = StartDate, periodicity = "daily" )
#verbose way
GDAXI$GDAXI.ROC <- na.locf(ROC(Cl(GDAXI)))
#function
rocFun <- function(x){
x <- merge(x, na.locf(ROC(Cl(x))))
}
rocFun(GDAXI)
我尝试了其他几种编写该函数的方法,但都没有添加列。 你能帮忙吗?
【问题讨论】:
-
Cl是做什么的? -
@Gautam Cl 确保根据收盘价计算变化率。
-
如果
GDAXI$GDAXI.ROC <- na.locf(ROC(Cl(GDAXI)))有效,我希望rocFun <- function(x){ x$ROC <- na.locf(ROC(Cl(x))); return(x) }有效。 -
@Gregor 我也是这么认为的,return(x) 也在控制台中输出数据,但是当我之后查看 xts 对象时,该列丢失了
-
就像任何其他 R 函数一样,您需要分配结果来修改对象。如果你有
x = 1,那么x + 2将打印3,但x仍然是1。如果你想修改x,你做x = x + 2,现在x是3。如果你想修改你的GDAXI对象GDAXI = rocFun(GDAXI)。