R строит простую функцию с для l oop, ничего не возвращает - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть новый R-пакет под названием «crypto» для сбора цен на монеты, я использую его для создания простой функции для получения в будущем, основная идея заключается в следующем:

CryptoList <- c('BTC','ETH', .....)

for (i in 1: length(CryptoList))
{
  x = CryptoList[i]
  a = crypto_history(x, start_date=start_date, end_date=end_date)
  assign (as.character(x), a)
}

Это прекрасно работает, как это, однако, когда я встроил это в функцию, он больше не назначает.

getCryptoPrice <- function(CryptoList, start_date, end_date)
{
for (i in 1: length(CryptoList))`enter code here`
{
  x = CryptoList[i]
  a = crypto_history(x, start_date=start_date, end_date=end_date)
  assign (as.character(x), a)
}

}

getCryptoPrice(CryptoList, '20180101', '20181231')

> BTC
Error: object 'BTC' not found

Похоже, что функция назначения не работает должным образом, в то время как это будет, если это не в функции. Кто-нибудь знает почему?

Спасибо

1 Ответ

1 голос
/ 26 февраля 2020

Вместо использования for l oop и assign другим способом будет возврат именованного списка. Списки проще в управлении и позволяют избежать загрязнения глобальной среды большим количеством объектов.

getCryptoPrice <- function(CryptoList, start_date, end_date) {
    output <- lapply(CryptoList, crypto::crypto_history, 
                    start_date=start_date, end_date=end_date)
    names(output) <- CryptoList
    return(output)
}

, а затем называть его следующим образом:

output <- getCryptoPrice(CryptoList, '20180101', '20181231')

Теперь вы можете получить доступ к отдельным кадрам данных, например * 1009. *, output[['ETH']] et c.

...