Dear all, `head()` returns a problematic output when a character is fed to its `n` parameter.
doubles and logicals are converted to integer as if `as.integer` was used, which I think is intuitive enough : ``` head(1:10, 4.1) # [1] 1 2 3 4 head(1:10, 4.9) # [1] 1 2 3 4 head(1:10, TRUE) # 1 head(1:10, FALSE) # integer(0) ``` But characters have a stranger behavior : ``` head(1:10, "0") # integer(0) head(1:10, "0.1") # integer(0) head(1:10, "1") # [1] 1 head(1:10, "1.2") # [1] 1 head(1:10, "2") # [1] [1] 1 2 3 4 5 6 7 8 9 10 head(1:10, "-1") # Error in length(x) + n : non-numeric argument to binary operator head(1:10, "-0") # Error in length(x) + n : non-numeric argument to binary operator head(1:10, "foo") # [1] 1 2 3 4 5 6 7 8 9 10 ``` When forgetting to convert user input to numeric this can lead to an unexpected and inconsistent result. I would suggest either using `as.integer` consistently on the input, or having a consistent error for all character input. `n = NA` also a returns a somewhat misleading error as it demands a logical input while the top level function requires an integer input. ``` head(1:10, NA) # same output for head(1:10, NA_integer_) # Error in if (n < 0L) max(length(x) + n, 0L) else min(n, length(x)) : # missing value where TRUE/FALSE needed ``` Kind regards, Antoine [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel