sigAND
選択した 2 つの列の両方に値がある (または NA でない) 場合に、日付を含む新しい列を作成するのに便利な関数です。Ilya Kipnis と彼のIKTrading
パッケージに感謝します。
しかし、この機能のヘルプページで気づいたのですが、cross
が使われています。上記の の使用法に関する私の理解sigAND
が正しければ、 の場所がないはずだと混乱していcross
ます。
sigAND
ソースコードを調べて、テストしました。出力列がまたはcross = TRUE
のベクトルのみの場合、関数は正常に動作します。したがって、 が関数内にいることは本当の意味ではないようです。NA
FALSE
cross
これが私の偽のデータと入力です:
dataAnd <- cbind(c(1, NA, 3, NA, NA, 10, 12), 7:13)
dataAnd <- xts(dataAnd, order.by = Sys.Date()+1:7)
colnames(dataAnd) <- c("col1", "col2")
label = "both"
data = dataAnd
columns = c("col1", "col2")
cross = T # F
コードを理解するのに役立つコメント付きのソースコードを次にsigAND
示します(私はまだRとプログラミングに慣れていません)。
function (label, data = mktdata, columns, cross = FALSE)
# cross = False is important, as cross=T makes no sense here.
# columns: named colums to apply comparison to
#{
# create an empty return_signal_column
ret_sig = NULL
colNums <- rep(0, length(columns)) # colNums <- c(0, 0)
for (i in 1:length(columns)) { # for each column
# example of how to use match.names()
# match.names("Close", colnames(IF_DAY)) return 4, index of '.Close'
# colNums[i] <- 4 assigned with an index
colNums[i] <- match.names(columns[i], colnames(data))
}
# extract the first/left column to be a one-column xts and assigned to ret_sig
ret_sig <- data[, colNums[1]]
# for second or third comparing column
for (i in 2:length(colNums)) {
# check whether a date has values in both columns, yes(true), no(NA)
# example: 1:4 & c(1, NA, NA, 10)
# return: [1] TRUE NA NA TRUE
ret_sig <- ret_sig & data[, colNums[i]]
}
# turn above [1] TRUE NA NA TRUE to [1] 1 NA NA 1
ret_sig <- ret_sig * 1
#### using cross option here makes no sense, right?
# if cross was assigned to be True
if (isTRUE(cross))
# create ret_sig logic value by diff(ret_sig) == 1
ret_sig <- diff(ret_sig) == 1 # !!!! NA-1 or 1-NA are NA
# name ret_sig to be label
colnames(ret_sig) <- label # label is given to the output
return(ret_sig)
}
データと入力をロードし、最初と最後の数行をコメントアウトせずに上記のソース コードを実行しました。
次のときに次の出力が得られましたcross = FALSE
。
> ret_sig
both
2016-03-19 1
2016-03-20 NA
2016-03-21 1
2016-03-22 NA
2016-03-23 NA
2016-03-24 1
2016-03-25 1
次のときに次の出力が得られましたcross = TRUE
。
> ret_sig
both
2016-03-19 NA
2016-03-20 NA
2016-03-21 NA
2016-03-22 NA
2016-03-23 NA
2016-03-24 NA
2016-03-25 FALSE
2 番目の状況は、そこにいる意味がないことを示唆していcross
ます。それとも、ここで重要な何かが欠けていますか? 誰でも見てもらえますか?