他のさまざまな言語から来て、R は強力で直感的だと思いますが、そのパフォーマンスには興奮していません。そこで、私が書いたスニペットを改善して、R でより適切にコーディングする方法を学ぶことにしました。
これは私が書いた関数で、ベクトルがバイナリ値 (2 つの異なる値または 1 つの値) であるかどうかを判断しようとしています。
isBinaryVector <- function(v) {
if (length(v) == 0) {
return (c(0, 1))
}
a <- v[1]
b <- a
lapply(v, function(x) { if (x != a && x != b) {if (a != b) { return (c()) } else { b = x }}})
if (a < b) {
return (c(a, b))
} else {
return (c(b, a))
}
}
編集: この関数は、ベクトルを調べてから、c()
バイナリ値でない場合は戻り、バイナリ値のc(a, b)
場合は a が小さい値で b が大きい値を返すことが期待されます (a == b の場合、c(a, a)
.
A B C
1 1 1 0
2 2 2 0
3 3 1 0
私はlapply
これisBinaryVector
をして取得します:
$A
[1] 1 1
$B
[1] 1 1
$C
[1] 0 0
中程度のサイズのデータセット (約 1800 * 3500、それらの 2/3 はバイナリ値) にかかった時間は約 15 秒です。セットには浮動小数点数のみが含まれます。
とにかく私はこれをより速く行うことができますか?
ご意見ありがとうございます。