Иногда, когда вы используете функцию which() в R, в результате вы можете получить целое число (0) , что указывает на то, что ни один из элементов вектора не оценивается как ИСТИНА.
Например, предположим, что мы используем следующий код, чтобы проверить, какие элементы в векторе равны значению 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, записанное как целое число (0) в R.
Важно отметить, что целое число (0) не является ошибкой, но иногда вы можете просто знать, когда это происходит.
В следующих примерах показано, как получить целое число (0) в R.
Пример 1. Перехват целого числа (0) в R с использованием функции идентичных()
Самый простой способ поймать целое число (0) в R — использовать функцию идентичных() следующим образом:
#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 .
Это позволяет нам узнать, что результатом функции which() является целое число длины 0.
Пример 2: Перехват целого числа (0) в R с использованием функции if else
Другой способ поймать целое число (0) — определить функцию if else, которая возвращает что-то конкретное, если встречается целое число (0) .
Например, мы могли бы определить следующую функцию для возврата фразы «Это целое число (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 действительно является целым числом (0) , наша функция возвращает указанную нами фразу.
И если x не является целым числом (0) , наша функция просто вернет результат функции which():
#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
Наша функция возвращает 3 и 4 , потому что это позиции элементов в векторе, равные значению 4.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:
Как написать свою первую функцию tryCatch() в R
Как создать вложенный цикл for в R
Как вернуть значение из функции в R