1

私は次のようにデータセットを埋めました:

tickers <- c("SPY","DIA")

 l_ply(tickers, function(sym) try(getSymbols(sym, from="2012-03-01",
 to=Sys.Date())))  

ClosePrices <- do.call(merge, lapply(tickers, function(x) Cl(get(x))))

tail(ClosePrices)

          SPY.Close DIA.Close
2012-06-29    136.10    128.45
2012-07-02    136.51    128.36

rsipx <- do.call(merge, lapply(ClosePrices, FUN=function(ClosePrices) RSI(ClosePrices)))  

    tail(rsipx)
           SPY.Close DIA.Close
2012-06-29  58.36391  58.92043
2012-07-02  59.37153  58.53483

私が解決できない問題は、入力ごとに複数の列を生成する関数を適用するときです。この場合、ADX は 4 つの値 (DIp DIn DX ADX) を生成します。

adxpx <- do.call(merge, lapply(tickers, FUN=function(tickers) ADX(get(tickers))))  
tail(adxpx)
               DIp      DIn       DX      ADX    DIp.1    DIn.1     DX.1    ADX.1
2012-06-29 53.47713 35.90631 19.65780 15.30299 55.14765 36.05527 20.93395 18.20818
2012-07-02 55.79485 32.58420 26.26262 16.08582 56.67699 33.08770 26.27903 18.78467

数値の代わりに対応する列名を取得するにはどうすればよいですか? (DX.1 の代わりに DX.DIA) 、または $ADX という名前の列のみを選択しますか?

4

1 に答える 1

3

渡すpaste関数内の列名にティッカー名のみを追加しますlapply

foo <- function(tickers){
    res <-  ADX(get(tickers))
    colnames(res) <- paste(colnames(res),tickers,sep = ".")
    res
}
adxpx <- do.call(merge, lapply(tickers, FUN=foo))  

1 つの列のみが必要な場合は、fooその列のみを選択するように関数を変更できます。たとえば、(列名を変更する前に) などの行を追加しますres <- res[,4]

于 2012-07-08T18:24:25.507 に答える