suppressPackageStartupMessages(library(tidyverse))
package 㤼㸱tidyverse㤼㸲 was built under R version 3.6.3
1. Why does this code not work?
#my_variable <- 10
#my_varıable
#> Error in eval(expr, envir, enclos): object 'my_varıable' not found
The variable being printed is my_varıable
, not my_variable
: the seventh character is “ı” (LATIN SMALL LETTER DOTLESS I), not “i”.
While it wouldn’t have helped much in this case, the importance of distinguishing characters in code is reasons why fonts which clearly distinguish similar characters are preferred in programming. It is especially important to distinguish between two sets of similar looking characters:
- the numeral zero (0), the Latin small letter O (o), and the Latin capital letter O (O),
- the numeral one (1), the Latin small letter I (i), the Latin capital letter I (I), and Latin small letter L (l).
In these fonts, zero and the Latin letter O are often distinguished by using a glyph for zero that uses either a dot in the interior or a slash through it. Some examples of fonts with dotted or slashed zero glyphs are Consolas, Deja Vu Sans Mono, Monaco, Menlo, Source Sans Pro, and FiraCode.
Error messages of the form "object '...' not found"
mean exactly what they say. R cannot find an object with that name. Unfortunately, the error does not tell you why that object cannot be found, because R does not know the reason that the object does not exist. The most common scenarios in which I encounter this error message are
I forgot to create the object, or an error prevented the object from being created.
I made a typo in the object’s name, either when using it or when I created it (as in the example above), or I forgot what I had originally named it. If you find yourself often writing the wrong name for an object, it is a good indication that the original name was not a good one.
I forgot to load the package that contains the object using library().
2. Tweak each of the following R commands so that they run correctly:
#ggplot(dota = mpg) + geom_point(mapping = aes(x = displ, y = hwy))
#> Error in FUN(X[[i]], ...): object 'displ' not found
The error message is argument "data" is missing, with no default
. This error is a result of a typo, dota
instead of data
.
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))

#fliter(mpg, cyl = 8)
#> Error in fliter(mpg, cyl = 8): could not find function "fliter"
R could not find the function fliter()
because we made a typo: fliter
instead of filter
.
#filter(mpg, cyl = 8)
#> `cyl` (`cyl = 8`) must not be named, do you need `==`?
We aren’t done yet. But the error message gives a suggestion. Let’s follow it.
filter(mpg, cyl == 8)
#filter(diamond, carat > 3)
#> Error in filter(diamond, carat > 3): object 'diamond' not found
R says it can’t find the object diamond
. This is a typo; the data frame is named diamonds
.
filter(diamonds, carat > 3)
How did I know? I started typing in diamond
and RStudio completed it to diamonds
. Since diamonds
includes the variable carat and the code works, that appears to have been the problem.
LS0tDQp0aXRsZTogIldvcmtmbG93IGJhc2ljcyBkZW1vIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCi0tLQ0KDQpgYGB7ciBsb2FkbGlicmFyeX0NCnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KHRpZHl2ZXJzZSkpDQpgYGANCg0KIyMjIDEuIFdoeSBkb2VzIHRoaXMgY29kZSBub3Qgd29yaz8NCg0KYGBge3Igd2VpcmRjaGFyfQ0KI215X3ZhcmlhYmxlIDwtIDEwDQojbXlfdmFyxLFhYmxlDQojPiBFcnJvciBpbiBldmFsKGV4cHIsIGVudmlyLCBlbmNsb3MpOiBvYmplY3QgJ215X3ZhcsSxYWJsZScgbm90IGZvdW5kDQpgYGANCg0KVGhlIHZhcmlhYmxlIGJlaW5nIHByaW50ZWQgaXMgYG15X3ZhcsSxYWJsZWAsIG5vdCBgbXlfdmFyaWFibGVgOiB0aGUgc2V2ZW50aCBjaGFyYWN0ZXIgaXMg4oCcxLHigJ0gKFtMQVRJTiBTTUFMTCBMRVRURVIgRE9UTEVTUyBJXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb3R0ZWRfYW5kX2RvdGxlc3NfSSkpLCBub3Qg4oCcaeKAnS4NCg0KV2hpbGUgaXQgd291bGRu4oCZdCBoYXZlIGhlbHBlZCBtdWNoIGluIHRoaXMgY2FzZSwgdGhlIGltcG9ydGFuY2Ugb2YgZGlzdGluZ3Vpc2hpbmcgY2hhcmFjdGVycyBpbiBjb2RlIGlzIHJlYXNvbnMgd2h5IGZvbnRzIHdoaWNoIGNsZWFybHkgZGlzdGluZ3Vpc2ggc2ltaWxhciBjaGFyYWN0ZXJzIGFyZSBwcmVmZXJyZWQgaW4gcHJvZ3JhbW1pbmcuIEl0IGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdHdvIHNldHMgb2Ygc2ltaWxhciBsb29raW5nIGNoYXJhY3RlcnM6DQoNCiAtIHRoZSBudW1lcmFsIHplcm8gKDApLCB0aGUgTGF0aW4gc21hbGwgbGV0dGVyIE8gKG8pLCBhbmQgdGhlIExhdGluIGNhcGl0YWwgbGV0dGVyIE8gKE8pLA0KIC0gdGhlIG51bWVyYWwgb25lICgxKSwgdGhlIExhdGluIHNtYWxsIGxldHRlciBJIChpKSwgdGhlIExhdGluIGNhcGl0YWwgbGV0dGVyIEkgKEkpLCBhbmQgTGF0aW4gc21hbGwgbGV0dGVyIEwgKGwpLg0KDQpJbiB0aGVzZSBmb250cywgemVybyBhbmQgdGhlIExhdGluIGxldHRlciBPIGFyZSBvZnRlbiBkaXN0aW5ndWlzaGVkIGJ5IHVzaW5nIGEgZ2x5cGggZm9yIHplcm8gdGhhdCB1c2VzIGVpdGhlciBhIGRvdCBpbiB0aGUgaW50ZXJpb3Igb3IgYSBzbGFzaCB0aHJvdWdoIGl0LiBTb21lIGV4YW1wbGVzIG9mIGZvbnRzIHdpdGggZG90dGVkIG9yIHNsYXNoZWQgemVybyBnbHlwaHMgYXJlIENvbnNvbGFzLCBEZWphIFZ1IFNhbnMgTW9ubywgTW9uYWNvLCBNZW5sbywgW1NvdXJjZSBTYW5zIFByb10oaHR0cHM6Ly9hZG9iZS1mb250cy5naXRodWIuaW8vc291cmNlLXNhbnMtcHJvLyksIGFuZCBGaXJhQ29kZS4NCg0KRXJyb3IgbWVzc2FnZXMgb2YgdGhlIGZvcm0gYCJvYmplY3QgJy4uLicgbm90IGZvdW5kImAgbWVhbiBleGFjdGx5IHdoYXQgdGhleSBzYXkuIFIgY2Fubm90IGZpbmQgYW4gb2JqZWN0IHdpdGggdGhhdCBuYW1lLiBVbmZvcnR1bmF0ZWx5LCB0aGUgZXJyb3IgZG9lcyBub3QgdGVsbCB5b3Ugd2h5IHRoYXQgb2JqZWN0IGNhbm5vdCBiZSBmb3VuZCwgYmVjYXVzZSBSIGRvZXMgbm90IGtub3cgdGhlIHJlYXNvbiB0aGF0IHRoZSBvYmplY3QgZG9lcyBub3QgZXhpc3QuIFRoZSBtb3N0IGNvbW1vbiBzY2VuYXJpb3MgaW4gd2hpY2ggSSBlbmNvdW50ZXIgdGhpcyBlcnJvciBtZXNzYWdlIGFyZQ0KDQoxLiBJIGZvcmdvdCB0byBjcmVhdGUgdGhlIG9iamVjdCwgb3IgYW4gZXJyb3IgcHJldmVudGVkIHRoZSBvYmplY3QgZnJvbSBiZWluZyBjcmVhdGVkLg0KDQoyLiBJIG1hZGUgYSB0eXBvIGluIHRoZSBvYmplY3TigJlzIG5hbWUsIGVpdGhlciB3aGVuIHVzaW5nIGl0IG9yIHdoZW4gSSBjcmVhdGVkIGl0IChhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSksIG9yIEkgZm9yZ290IHdoYXQgSSBoYWQgb3JpZ2luYWxseSBuYW1lZCBpdC4gSWYgeW91IGZpbmQgeW91cnNlbGYgb2Z0ZW4gd3JpdGluZyB0aGUgd3JvbmcgbmFtZSBmb3IgYW4gb2JqZWN0LCBpdCBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHRoZSBvcmlnaW5hbCBuYW1lIHdhcyBub3QgYSBnb29kIG9uZS4NCg0KMy4gSSBmb3Jnb3QgdG8gbG9hZCB0aGUgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBvYmplY3QgdXNpbmcgbGlicmFyeSgpLg0KDQojIyMgMi4gVHdlYWsgZWFjaCBvZiB0aGUgZm9sbG93aW5nIFIgY29tbWFuZHMgc28gdGhhdCB0aGV5IHJ1biBjb3JyZWN0bHk6DQoNCmBgYHtyIHdyb25nfQ0KI2dncGxvdChkb3RhID0gbXBnKSArIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKQ0KIz4gRXJyb3IgaW4gRlVOKFhbW2ldXSwgLi4uKTogb2JqZWN0ICdkaXNwbCcgbm90IGZvdW5kDQpgYGANCg0KVGhlIGVycm9yIG1lc3NhZ2UgaXMgYGFyZ3VtZW50ICJkYXRhIiBpcyBtaXNzaW5nLCB3aXRoIG5vIGRlZmF1bHRgLiBUaGlzIGVycm9yIGlzIGEgcmVzdWx0IG9mIGEgdHlwbywgYGRvdGFgIGluc3RlYWQgb2YgYGRhdGFgLg0KDQpgYGB7ciBkb3RhZml4fQ0KZ2dwbG90KGRhdGEgPSBtcGcpICsNCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpDQpgYGANCg0KYGBge3IgbWlzcGVsbGZpbHRlcn0NCiNmbGl0ZXIobXBnLCBjeWwgPSA4KQ0KIz4gRXJyb3IgaW4gZmxpdGVyKG1wZywgY3lsID0gOCk6IGNvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uICJmbGl0ZXIiDQpgYGANCg0KUiBjb3VsZCBub3QgZmluZCB0aGUgZnVuY3Rpb24gYGZsaXRlcigpYCBiZWNhdXNlIHdlIG1hZGUgYSB0eXBvOiBgZmxpdGVyYCBpbnN0ZWFkIG9mIGBmaWx0ZXJgLg0KDQpgYGB7ciBmaXhmaWx0ZXJ9DQojZmlsdGVyKG1wZywgY3lsID0gOCkNCiM+IGBjeWxgIChgY3lsID0gOGApIG11c3Qgbm90IGJlIG5hbWVkLCBkbyB5b3UgbmVlZCBgPT1gPw0KYGBgDQoNCldlIGFyZW7igJl0IGRvbmUgeWV0LiBCdXQgdGhlIGVycm9yIG1lc3NhZ2UgZ2l2ZXMgYSBzdWdnZXN0aW9uLiBMZXTigJlzIGZvbGxvdyBpdC4NCg0KYGBge3IgY3lsOH0NCmZpbHRlcihtcGcsIGN5bCA9PSA4KQ0KYGBgDQoNCmBgYHtyIGNhcmF0fQ0KI2ZpbHRlcihkaWFtb25kLCBjYXJhdCA+IDMpDQojPiBFcnJvciBpbiBmaWx0ZXIoZGlhbW9uZCwgY2FyYXQgPiAzKTogb2JqZWN0ICdkaWFtb25kJyBub3QgZm91bmQNCmBgYA0KDQpSIHNheXMgaXQgY2Fu4oCZdCBmaW5kIHRoZSBvYmplY3QgYGRpYW1vbmRgLiBUaGlzIGlzIGEgdHlwbzsgdGhlIGRhdGEgZnJhbWUgaXMgbmFtZWQgYGRpYW1vbmRzYC4NCg0KYGBge3IgZGlhbW9uZHN9DQpmaWx0ZXIoZGlhbW9uZHMsIGNhcmF0ID4gMykNCmBgYA0KDQpIb3cgZGlkIEkga25vdz8gSSBzdGFydGVkIHR5cGluZyBpbiBgZGlhbW9uZGAgYW5kIFJTdHVkaW8gY29tcGxldGVkIGl0IHRvIGBkaWFtb25kc2AuIFNpbmNlIGBkaWFtb25kc2AgaW5jbHVkZXMgdGhlIHZhcmlhYmxlIGNhcmF0IGFuZCB0aGUgY29kZSB3b3JrcywgdGhhdCBhcHBlYXJzIHRvIGhhdmUgYmVlbiB0aGUgcHJvYmxlbS4NCg0KIyMjIDMuIFByZXNzIEFsdCArIFNoaWZ0ICsgSy4gV2hhdCBoYXBwZW5zPyBIb3cgY2FuIHlvdSBnZXQgdG8gdGhlIHNhbWUgcGxhY2UgdXNpbmcgdGhlIG1lbnVzPw0KDQpUaGlzIGdpdmVzIGEgbWVudSB3aXRoIGtleWJvYXJkIHNob3J0Y3V0cy4gVGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIG1lbnUgdW5kZXIgYFRvb2xzIC0+IEtleWJvYXJkIFNob3J0Y3V0cyBIZWxwLmA=