R 用 for 循环构建简单函数,returns 什么都没有

R building simple function with for loop, returns nothing

我这里有一个新的 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

看起来 assign 函数没有正常工作,但如果它不在函数中,它就会正常工作。有人知道为什么吗?

谢谢

不使用 for 循环和 assign 另一种方法是 return 命名列表。列表更易于管理,并避免大量对象污染全局环境。

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')

现在,您可以访问单独的数据帧,例如 output[['BTC']]output[['ETH']]