Вдохновленный ответом Андри, вы можете использовать identical
и избежать любых проблем с атрибутами, используя тот факт, что это пустой набор этого класса объектов, и объединить его с элементом этого класса:
attr(a,"foo")<-"bar"
> identical(1L,c(a,1L))
[1] TRUE
Или, в более общем смысле:
is.empty <- function(x, mode=NULL){
if (is.null(mode)) mode <- class(x)
identical(vector(mode,1),c(x,vector(class(x),1)))
}
b <- numeric(0)
> is.empty(a)
[1] TRUE
> is.empty(a,"numeric")
[1] FALSE
> is.empty(b)
[1] TRUE
> is.empty(b,"integer")
[1] FALSE