R で整数 (0) をキャッチする方法 (例あり)
R でwhat()関数を使用すると、 integer(0)が返されることがあります。これは、ベクトル内のどの要素も TRUE と評価されないことを示します。
たとえば、次のコードを使用して、ベクトルのどの要素が値 10 に等しいかを確認するとします。
#define vector of values data <- c(1, 2, 4, 4, 5, 7, 8, 9) #find elements in vector equal to 10 x <- which(data == 10 ) #view results x integer(0)
ベクトル内の要素はいずれも 10 に等しくないため、結果は長さ 0 の整数となり、R ではinteger(0)として記述されます。
整数 (0) はエラーではないことに注意することが重要ですが、場合によっては、それがいつ発生するかを知りたい場合もあります。
次の例は、R で整数 (0)をキャプチャする方法を示しています。
例 1: Identify() 関数を使用して R 内の整数 (0) をキャッチする
R で整数 (0)をキャッチする最も簡単な方法は、次のようにIdentity()関数を使用することです。
#define vector of values data <- c(1, 2, 4, 4, 5, 7, 8, 9) #find elements in vector equal to 10 x <- which(data == 10 ) #test if x is identical to integer(0) identical(x, integer(0)) [1] TRUE
結果はinteger(0)に等しいため、 R はTRUEを返します。
これにより、 what() 関数の結果が長さ 0 の整数であることがわかります。
例 2: if else 関数を使用して R で整数 (0) をキャッチする
整数 (0)をキャッチするもう 1 つの方法は、整数 (0)が発生した場合に特定のものを返す if else 関数を定義することです。
たとえば、整数 (0 ) が表示された場合に「整数 (0 ) です」というフレーズを返す次の関数を定義できます。
#define function to catch integer(0) integer0_test <- function (data) { if (identical(data, integer(0))) { return (' It is an integer(0) ') } else { return (data) } }
次に、この関数を使用できます。
#define vector of values data <- c(1, 2, 4, 4, 5, 7, 8, 9) #find elements in vector equal to 10 x <- which(data == 10 ) #use function to test if x is integer(0) integer0_test(x) [1] "It is an integer(0)"
x は確かにinteger(0)なので、関数は指定した文を返します。
x がinteger(0)でない場合、この関数は単に what() 関数の結果を返します。
#define vector of values data <- c(1, 2, 4, 4, 5, 7, 8, 9) #find elements in vector equal to 4 x <- which(data == 4 ) #use function to test if x is integer(0) integer0_test(x) [1] 3 4
これらは値 4 に等しいベクトル要素の位置であるため、関数は3と4を返します。
追加リソース
次のチュートリアルでは、R で他の一般的なタスクを実行する方法について説明します。
R で最初の tryCatch() 関数を作成する方法
R でネストされた For ループを作成する方法
Rで関数の値を返す方法