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

Вот мой код прямо сейчас:

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 пуст. Как мне нужно изменить свою функцию, чтобы получить вывод фрейма данных?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
136
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не понял, что должен делать набор выражений внутри вызова 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)

Другие вопросы по теме