Определяемая пользователем функция с тикером в качестве входных данных?

#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 .