Предположим, у вас есть вход a
, который входит в существующую функцию fun
.Я ищу функцию preserved(a, fun(a))
, которая возвращает TRUE
, если тип неизменен, FALSE
в противном случае.
Пример:
a <- 1L # [1] 1 - integer
b <- a[FALSE] # integer(0)
c <- a[2] # [1] NA
d <- ncol(a) # NULL
e <- a/0 # [1] Inf
f <- 1 # [1] 1 - numeric
g <- as.factor(a) # [1] 1 Levels: 1
Ожидаемый результат:
preserved(a, 2L) = TRUE
preserved(a, b) = FALSE
preserved(a, c) = FALSE
preserved(a, d) = FALSE
preserved(a, e) = FALSE
preserved(a, f) = FALSE
preserved(a, f) = FALSE
preserved(a, g) = FALSE
Плохой взлом (не векторизованный) будет
preserved <- function(a, b) {
if (length(b) == length(a)) {
if (is.na(b) == is.na(a) &
class(b) == class(a) &
is.null(b) == is.null(a) &
is.nan(b) == is.nan(a) &
is.factor(b) == is.factor(a)) {
return(TRUE)
} else {
return(FALSE)
}
} else {
return(FALSE)
}
}