3

for ループを介して一連の空の xts オブジェクトを作成しようとしていますが、失敗しています。

作成したい空の XTS オブジェクトの名前を含む SYMBOL_vector という名前の文字ベクトルを作成しました。また、シンボル SPY のデータを含む、getSymbols を使用していくつかの株式市場データもダウンロードしました。その結果、SPY という名前の XTS オブジェクトが存在します。

私のforループコードは次のとおりです。

for (i in 1 : length(SYMBOL_vector)) {
  SYMBOL_vector[i] <- as.xts(order.by = index(SPY))
}

コードを実行すると、次のエラーが表示されます。

xts(x = NULL, order.by = x, ...) のエラー: 複数の実引数と一致する仮引数 "order.by"

フィードバックが重要な場合は、空の xts オブジェクトが作成されたら、別の for ループを作成して、それぞれに毎日の戻りデータを入力します。

ループに対してまったく異なるアプローチを取ることに反対しているわけではありません...これは、迅速かつ簡単に思えました。助けてくれてありがとう!

4

2 に答える 2

3

xtsの代わりに を使用するだけでコードが機能するはずですがas.xts、問題を攻撃するのは実際には「R の方法」(または「quantmod の方法」) ではありません。

このことを考慮:

library(quantmod)
s <- c("SPY", "DIA", "QQQ")
e <- new.env() # an empty environment to hold yahoo price data
getSymbols(s, env=e)
L <- eapply(e, dailyReturn) # a list of returns
L$SPY

おそらくここで終了できますが、必要に応じて、リストを環境に変換できます。

ret <- as.environment(L) # an environment with xts objects of daily returns
ls(ret)
get("DIA", pos=ret)

または、本当に必要な場合は、そのret環境をアタッチできます (お勧めしません) 。

attach(ret)  # not recommended
head(QQQ)
#           daily.returns
#2007-01-03 -0.0050621261
#2007-01-04  0.0189639223
#2007-01-05 -0.0047662279
#2007-01-08  0.0006841505
#2007-01-09  0.0050136737
#2007-01-10  0.0117913832
于 2013-12-23T14:07:32.150 に答える
0

@PHXtrader あなたがやろうとしているのは、文字のベクトル内の要素を、あなたがやりたいことではなく、意味をなさない xts オブジェクトに置き換えることです。名前に値を割り当てるには、「割り当て」機能を使用する必要があります (詳細情報を取得するには?assign )。コードの他のエラーは、 'xts' だけでなく 'as.xts' を使用していることです。このおもちゃの例を見てください:

tickers <- c("AMZN","AAPL")          # this is a character object
getSymbols("SPY",from="2013-09-01")  # this is a xts object

for (i in 1:length(tickers)) {
  assign(tickers[i],xts(order.by = index(SPY)))
}

結果は、AMZN およびゼロ付き AAPL という名前の 2 つの xts オブジェクトです。

>str(AAPL)
An 'xts' object of zero-width

> AAPL
Data:
numeric(0)

Index:
Date[1:9], format: "2013-09-03" "2013-09-04" "2013-09-05" "2013-09-06" "2013-09-09" ...

やりたいことを達成するためのより良い安全な方法は、リストを使用することです (または、新しい環境を作成することもあります)。上記のようにオブジェクトを作成すると、見つけてデバッグするのが非常に困難なバグにつながる傾向があります。これらのタイプの構造体は、誤って変数を上書きしたり、他の多くの潜在的なエラーにつながります。次の例では、ループを回避し、リストに空のオブジェクトを作成します。

tickers <- c("AMZN","AAPL") 
mylist <- rep(as.list(xts(order.by = index(SPY))),2) # creates 2 empty xts-objects in list 
names(mylist) <- tickers

> str(mylist)
List of 2
 $ AMZN:An 'xts' object of zero-width
 $ AAPL:An 'xts' object of zero-width
于 2013-09-15T10:01:48.797 に答える