私はこのcodeを使用して、プロットで燭台を作成しています。しかし、それは非常に非効率的なループを含んでいます(10K観測をループするのに38秒)。また、rbind
関数を使用しています。つまり、日付を数値に変換してからもう一度戻す必要があります。これは日付を考慮してまっすぐ進むとは思われません。ループをベクター操作に置き換えます
Imは、より効率的な機能を置換する試みループである:出力は、入力データから1日(日)と3 COLである第1の観察とベクトルで
for(i in 1:nrow(prices)){
x <- prices[i, ]
# For high/low
mat <- rbind(c(x[1], x[3]),
c(x[1], x[4]),
c(NA, NA))
plot.base <- rbind(plot.base, mat)
}
、第2の観察であります入力データから1番目と4番目の列、3番目の観測は2つのNAsです。 NAsは後でプロットするために重要です。
これを達成する最も効率的な方法は何ですか?
最小再現例:
library(quantmod)
prices <- getSymbols("MSFT", auto.assign = F)
# Convert to dataframe
prices <- data.frame(time = index(prices),
open = as.numeric(prices[,1]),
high = as.numeric(prices[,2]),
low = as.numeric(prices[,3]),
close = as.numeric(prices[,4]),
volume = as.numeric(prices[,5]))
# Create line segments for high and low prices
plot.base <- data.frame()
for(i in 1:nrow(prices)){
x <- prices[i, ]
# For high/low
mat <- rbind(c(x[1], x[3]),
c(x[1], x[4]),
c(NA, NA))
plot.base <- rbind(plot.base, mat)
}
編集:
dput(head(prices))
structure(list(time = structure(c(13516, 13517, 13518, 13521,
13522, 13523), class = "Date"), open = c(29.91, 29.700001, 29.629999,
29.65, 30, 29.799999), high = c(30.25, 29.969999, 29.75, 30.1,
30.18, 29.889999), low = c(29.4, 29.440001, 29.450001, 29.530001,
29.73, 29.43), close = c(29.860001, 29.809999, 29.639999, 29.93,
29.959999, 29.66), volume = c(76935100, 45774500, 44607200, 50220200,
44636600, 55017400)), .Names = c("time", "open", "high", "low",
"close", "volume"), row.names = c(NA, 6L), class = "data.frame")
コードがオブジェクトを拡大しています( 'plot.base')です。それはプログラミングでできる最速の操作についてです。代替案の開発とテストを容易にするために[最小再現可能な例](http://stackoverflow.com/a/5963610/1412059)を提供してください。 – Roland
@Roland完全な例がリンクにあります。元の投稿には最小の例が含まれます –
例は*あなたの質問本文にあるはずです*。 – Roland