Вот мой код прямо сейчас:
f=function(Symbol, start, end, interval){
getSymbols(Symbols=Symbol, from=start, to= end)
Symbol=data.frame(Symbol)
a=length(Symbol$Symbol.Adjusted)
b=a/interval
c=ceiling(b)
origData=as.data.frame(matrix(`length<-`(Symbol$Symbol.Adjusted, c * interval), ncol = interval, byrow = TRUE))
return(origData)
}
f("SPY", "2012-01-01", "2013-12-31", 10)
Далее мне нужно получить скорректированную цену закрытия и учитывать эти ценовые данные только для следующих задач. Разделите дневную цену закрытия с поправкой на акции на N блоков в виде строк во фрейме данных. Таким образом, каждый блок содержит M дней (столбцов) данных, где M равно значению временного интервала. В моем коде это называется origData. Предполагается, что функция возвращает фрейм данных origData, но всякий раз, когда я пытаюсь запустить это, она сообщает мне, что фрейм данных Symbol пуст. Как мне нужно изменить свою функцию, чтобы получить вывод фрейма данных?
Я не понял, что должен делать набор выражений внутри вызова data.matrix
, и вы не попытались объяснить свое намерение. Однако ваша ошибка возникает дальше по линии. Если вы введете отладочный вызов str(Symbol)
, вы увидите, что Symbol
будет оцениваться как «SPY», но это просто символьное значение, а не имя объекта R. Объект, который вы хотите получить, называется SPY
, и способ получить значение объекта, когда у вас есть доступ только к значению символа, — это использовать функцию R get
. Попробуйте добавить это после вызова getSymbols внутри функции:
library(quantmod) # I'm assuming this was the package in use
...
Symbol=data.frame( get(Symbol) )
str(Symbol) # will print the result at your console
....
# then perhaps you can work on what you were trying inside the data.matrix call
Вы также обнаружите, что имя Symbol.Adjusted
не будет работать (поскольку R не является макроязыком). Вам нужно будет сделать что-то вроде:
a=length( Symbol[[ paste0(Symbol, ".Adjusted")]] )
О, подожди. Вы перезаписали значение для Symbol
. Это не сработает. Вам нужно использовать другое имя для вашего фрейма данных. Так почему бы вам не отредактировать свой вопрос, чтобы исправить ошибки, которые я уже выявил, а также описать, что вы пытаетесь сделать, когда использовали as.data.frame
.
Наблюдения @ IRTFM верны. Включив эти изменения, вы можете изменить свою функцию на:
library(quantmod)
f = function(Symbol, start, end, interval){
getSymbols(Symbols=Symbol, from=start, to= end)
data= get(Symbol)
col = data[, paste0(Symbol, '.Adjusted')]
a=length(col)
b=a/interval
c=ceiling(b)
origData= as.data.frame(matrix(`length<-`(col, c * interval),
ncol = interval, byrow = TRUE))
return(origData)
}
f("SPY", "2012-01-01", "2013-12-31", 10)