R重复功能并将每次迭代存储为对象

时间:2014-02-27 20:43:54

标签: r function

我是R的新手。

我正在尝试从样本中创建具有不同频率的时间序列矩阵。更具体地说,我有一个从1870年到2014年的月度价格矩阵,我想从中创建新的矩阵,频率从1个月到120个月不等。对于每个价格频率,我需要R来存储一个单独的对象,然后可以在函数外部使用。原始样本有1730行(价格观察)和8列(变量)。

到目前为止,我已经想出了这个。该函数以看似正确的频率打印所有矩阵,但是我不知道如何将矩阵保存在单个对象中。

asset_prices<-monthly historical prices

     prices.rep <- function(x)  {
        i <- 1
        repeat {
            prices<-x[seq(1, 1730,i),1:8]
            print(prices)
           i <- i+1
           if(i > 120)
            break
        }
    return(prices)
    }

    results.rep<-prices.rep(asset_prices)
    results.rep #only returns the last iteration of the function

非常感谢帮助。 提前谢谢

1 个答案:

答案 0 :(得分:0)

考虑一下:

prices.rep <- function(x)  {
    prices <- list()
    for(i in 1:12) {
        prices[[i]] <- x[seq(1, 1730, i), 1:8]
        #print(prices)
    }
    return(prices)
}

这将返回一个矩阵列表(假设你的x参数是一个矩阵)。

您还可以使用lapply

更紧凑地编写它
prices.rep <- function(x)
    lapply(1:12, function(i) x[seq(1, 1730, i), 1:8] )