0

我有一个动物园对象列表。核心数据是几个股票代码的调整收盘价,月度数据。每个列表对象是每个代码的单独时间序列。我想计算每个对象中每个月的每月变化。如果它有帮助,这就是让我达到我想要的计算的原因:

path = 'C:/SectorRotationSymbList072013.csv'
symbs = read.csv(path, header = FALSE, stringsAsFactors = FALSE)
symbs = symbs[, 1]
importData = vector('list', length(symbs))

#Get monthly pricing data.
for (sIdx in 1:length(symbs)){
    #Import the data for each symbol into the list.
    importData[[sIdx]] = get.hist.quote(instrument= symbs[sIdx],
        start="2000-01-01", end="2013-07-15", quote="AdjClose",
        provider="yahoo", origin="1970-01-01",
        compression="m", retclass="zoo")
}

names(importData) = symbs

我可以使用 sapply 获得每个对象的月度变化,如下所示:

monthlyGainsLosses = sapply(importData, diff)

不过,我想要相对变化(%)。我已经尝试了所有我能想到的关于简单计算的变化,包括:

monthlyGainsLosses = sapply(importData, diff / importData)
monthlyGainsLosses = sapply(importData, diff / coreData(importData))

这些都不起作用。对于后者(这对我来说似乎最合乎逻辑)我得到了错误:

二元运算符的非数字参数。任何人都可以帮忙吗?

4

1 回答 1

1

sapply期望一个函数作为第二个参数,diff / coreDate(importData)它不是 R 中的函数,而是一个表达式。

您可以提供 lambda 来纠正它。

monthlyGainsLosses = sapply(importData, function(x) diff(x) / (x))

或者,如果您想避免使用 lambda,则分两步进行。

perc <- function(x) diff(x) / x
monthlyGainsLosses = sapply(importData, perc)
于 2013-07-21T18:14:33.677 回答