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は 2 番目の引数として関数を期待しdiff / coreDate(importData)、R の関数ではなく式です。

ラムダを指定して修正できます。

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

または、ラムダを回避したい場合は、2 つのステップで実行します。

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