expect_equal( sapply(iris, n_distinct), sapply(iris, function(.) length(unique(.))), info = "n_distinct() gives the correct results on a data.frame" ) df_var <- data.frame( l = c(TRUE, FALSE, FALSE), i = c(1, 1, 2), d = Sys.Date() + c(1, 1, 2), f = factor(letters[c(1, 1, 2)]), n = c(1, 1, 2) + 0.5, t = Sys.time() + c(1, 1, 2), c = letters[c(1, 1, 2)], stringsAsFactors = FALSE ) expect_equal( sapply(df_var, n_distinct), sapply(df_var, function(.) length(unique(.))), info = "n_distinct() gives correct results for key types" ) expect_equal( n_distinct(c(1.0, NA, NA)), 2, info = "n_distinct() treats NA correctly" ) expect_equal( n_distinct(1, 1:4), 4, info = "n_distinct() recycles length 1 vectors" ) expect_equal( n_distinct(1:4, 1), 4, info = "n_distinct() recycles length 1 vectors" ) x <- iris$Sepal.Length y <- iris$Sepal.Width expect_equal( n_distinct(iris$Sepal.Length, iris$Sepal.Width), n_distinct(x, y), info = "n_distinct() handles unnamed" ) expect_identical( data.frame(x = 42) %>% summarise(n = n_distinct(.data$x)), data.frame(n = 1L), info = "n_distinct() respects .data" ) rm(df_var, x, y) expect_equal( n_distinct(c(0, 1, 1, 2, 3, 5, 8, NA), na.rm = TRUE), 6L, info = "na.rm removes NAs" ) expect_equal( n_distinct(list(c(1, 1, 2), c(1, 2, 3))), 2L, info = "n_distinct() can handle nested lists" )