2013-07-21 2 views
0

У меня есть список объектов зоопарка. Основными данными являются скорректированное закрытие нескольких символов акций, ежемесячных данных. Каждый объект списка представляет собой отдельный временной ряд для каждого тикера. Я хотел бы рассчитать ежемесячные изменения за каждый месяц в каждом объекте. Если это помогает, вот что заставляет меня до моего желаемого расчета:Как рассчитать процентное изменение объекта зоопарка, используя sapply?

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)) 

Ни один из них не работает. Для последнего (что кажется мне наиболее логичным) я получаю ошибку:

нецифровой аргумент для двоичного оператора. Может ли кто-нибудь помочь?

+1

Используйте 'diff (..., arithmetic = FALSE) -1'. См. '? Diff.zoo'. –

ответ

1

sapply ожидает, что функция в качестве второго аргумента и diff/coreDate(importData) не является функцией в R, а выражением.

Вы можете поставить лямбда, чтобы исправить это.

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

Или, если вы хотите избежать лямбда, сделайте это в два этапа.

perc <- function(x) diff(x)/x 
monthlyGainsLosses = sapply(importData, perc) 
+0

Удивительный. Мне было интересно, нужно ли мне выполнять функцию. Большое спасибо. – StatsViaCsh

Смежные вопросы