Hi, and welcome!
Even with the vignette, a reproducible example, called a reprex always attracts more (and sometimes better) answers. Here, the red herring is the diamond vignette, which isn't in the package.
@andresrcs put his finger exactly on the problem, nevertheless.
For the benefit of others who may come to this thread from a more basic level, the best place to start with this type of problem is to examine the structure of the object
str(d0)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 53940 obs. of 10 variables:
$ carat : num 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
$ cut : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
$ color : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
$ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
$ depth : num 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
$ table : num 55 61 65 58 58 57 57 55 61 61 ...
$ price : int 326 326 327 334 335 336 336 337 337 338 ...
$ x : num 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
$ y : num 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
$ z : num 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
As you noted, d0$x is clearly numeric, which can be confirmed simply with
is.numeric(d0$x)
[1] TRUE
The $
operator to examine a column in the data frame is simple and not much prone to error; it provides a clear look at the object.
class(d0$x)
[1] "numeric"
Compare this with
class(d0)
[1] "tbl_df" "tbl" "data.frame"
The next question: what is d0[, "x"]
?
d0[,"x"]
# A tibble: 53,940 x 1
x
<dbl>
1 3.95
2 3.89
3 4.05
4 4.2
5 4.34
6 3.94
7 3.95
8 4.07
9 3.87
10 4
# … with 53,930 more rows
which is, of course, of class tibble, not numeric.
Square brackets, for subsetting, return portions of data frames. Before applying a function to a subset, it pays to apply str()
to confirm that the subset is an appropriate argument.