Ответ 1
Вам нужно использовать (как указывает Дэвид в комментариях):
range.default(f, finite=TRUE)
# [1] 1 3
или
range(f, finite=1)
# [1] 1 3
Функция ошибочно требует, чтобы finite
был числовым, но затем правильно использовал его при удалении бесконечных значений. Примечание:
f2 <- data.frame(x=1:2, y=3:4)
range(f2, finite=TRUE) # Error
Очевидно, что что-то смешное происходит с тем, что generic является примитивным, а ваш аргумент - объектом, вероятно связанным с (от ?range
):
диапазон - это общая функция: методы могут быть определены для него напрямую или с помощью обобщенной общей группы. Чтобы это нормально работало, аргументы... должны быть неназванными, а отправка - по первому аргументу.
Таким образом, при проверке своих аргументов он считает, что finite=TRUE
является частью данных для проверки диапазона, и поскольку он логичен, он терпит неудачу в тестировании на числомерность. Тем не менее, как только это пройдет, проверка будет правильно подсчитана.
Чтобы подтвердить:
range(f, finite=2000)
# [1] 1 3