最初に知っておくべきことは、なぜzoomChart()
必要な値を返すのに、返さないのかということですzooom()
。
zoomChart()
reChart()
行で終わる関数を呼び出すためinvisible(chob)
です。(chob
はあなたが探しているオブジェクトの名前です。)
zooom()
これをしません。を呼び出しますが、評価されている環境から抜け出すようにzoomChart()
は調整されていません。ただし、の修正バージョンを作成することで、それを行うことができます。chob
zoomChart()
zooom()
これを行うには、最初にファイルにダンプzooom
してから、次のように編集された関数を作成しますzooom2
。
require(quantmod)
dump("zooom", file="zooom2.R")
私が行った3つの編集は次のとおりです。
get.chob()
の呼び出しをへの呼び出しに置き換えますquantmod:::get.chob()
。これが必要なのは、とは異なりzooom
、それを囲む環境zooom2
がないためです。namespace:quantmod
zoomChart()
の出力をオブジェクトに割り当てますchob
。
chob
関数を。で終了して、呼び出し元の環境に戻りinvisible(chob)
ます。
変更された関数は次のとおりです。
zooom2 <-
function (n = 1, eps = 2)
{
for (i in 1:n) {
cat("select left and right extremes by clicking the chart\n")
points <- locator(2)
if (abs(diff(points$x)) < eps) {
zoomChart()
}
else {
usr <- par("usr")
xdata <- quantmod:::get.chob()[[2]]@xdata
xsubset <- quantmod:::get.chob()[[2]]@xsubset
sq <- floor(seq(usr[1], usr[2], 1))
st <- which(floor(points$x[1]) == sq)/length(sq) *
NROW(xdata[xsubset])
en <- which(floor(points$x[2]) == sq)/length(sq) *
NROW(xdata[xsubset])
sorted <- sort(c(st, en))
st <- sorted[1]
en <- sorted[2] * 1.05
chob <- zoomChart(paste(index(xdata[xsubset])[max(1, floor(st),
na.rm = TRUE)], index(xdata[xsubset])[min(ceiling(en),
NROW(xdata[xsubset]), na.rm = TRUE)], sep = "::"))
}
}
cat("done\n")
invisible(chob)
}
関数をソースするか、Rセッションに貼り付けて、次のように使用できます(たとえば)。
data(sample_matrix)
chartSeries(sample_matrix)
d <- zooom2()
# Click to interactively zoom in
# extract the data visible in the selected region
d_sub <- d@xdata[d@xsubset,]
head(d_sub)
# Open High Low Close
# 2007-03-28 48.33090 48.53595 48.33090 48.53595
# 2007-03-29 48.59236 48.69988 48.57432 48.69988
# 2007-03-30 48.74562 49.00218 48.74562 48.93546
# 2007-03-31 48.95616 49.09728 48.95616 48.97490
# 2007-04-01 48.94407 48.97816 48.80962 48.87032
# 2007-04-02 48.90488 49.08400 48.90488 49.06316
これが便利な場合は、quantmod
ソースに追加して、独自のバージョンのパッケージを再コンパイルすることをお勧めします。
お役に立てれば。