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