#r #function #ticker
#r #функция #тикер
Вопрос:
Вот мой код прямо сейчас:
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 .
Предполагается, что функция возвращает исходные данные фрейма данных, но всякий раз, когда я пытаюсь запустить это, она сообщает мне, что фрейм символьных данных пуст. Как мне нужно изменить мою функцию, чтобы получить вывод фрейма данных?
Ответ №1:
замечания @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)
Ответ №2:
Я не понял, что должен делать набор выражений внутри data.matrix
вызова, и вы не предприняли никаких усилий, чтобы объяснить свое намерение. Однако ваша ошибка возникает дальше по строке. Если вы введете отладочный вызов str(Symbol)
, вы увидите, что Symbol
он будет оцениваться как «ШПИОНСКИЙ», но это всего лишь символьное значение, а не имя объекта R. Объект, который вы wnat, назван 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
.