suppressPackageStartupMessages(library("tidyverse"))
package 㤼㸱tidyverse㤼㸲 was built under R version 3.6.3
1. What does commas(letters, collapse = "-")
do? Why?
The commas()
function in the chapter is defined as
commas <- function(...) {
str_c(..., collapse = ", ")
}
When commas()
is given a collapse argument, it throws an error.
commas(letters, collapse = "-")
#> Error in str_c(..., collapse = ", "): formal argument "collapse" matched by multiple actual arguments
This is because when the argument collapse
is given to commas()
, it is passed to str_c()
as part of ...
. In other words, the previous code is equivalent to
str_c(letters, collapse = "-", collapse = ", ")
#>Error in str_c(letters, collapse = "-", collapse = ", "): formal argument "collapse" matched by multiple actual arguments
However, it is an error to give the same named argument to a function twice.
One way to allow the user to override the separator in commas()
is to add a collapse argument to the function.
commas <- function(..., collapse = ", ") {
str_c(..., collapse = collapse)
}
Exercise 2. It’d be nice if you could supply multiple characters to the pad argument, e.g. rule("Title", pad = "-+")
. Why doesn’t this currently work? How could you fix it?
This is the definition of the rule function from the chapter.
rule <- function(..., pad = "-") {
title <- paste0(...)
width <- getOption("width") - nchar(title) - 5
cat(title, " ", str_dup(pad, width), "\n", sep = "")
}
rule("Important output")
Important output ---------------------------------------------------------------------------
You can currently supply multiple characters to the pad argument, but the output will not be the desired width. The rule()
function duplicates pad a number of times equal to the desired width minus the length of the title and five extra characters. This implicitly assumes that pad is only one character. If pad were two character, the output will be almost twice as long.
rule("Valuable output", pad = "-+")
Valuable output -+-+-+-+-+-+
One way to handle this is to use str_trunc()
to truncate the string, and str_length()
to calculate the number of characters in the pad argument.
rule <- function(..., pad = "-") {
title <- paste0(...)
width <- getOption("width") - nchar(title) - 5
padding <- str_dup(
pad,
ceiling(width / str_length(title))
) %>%
str_trunc(width)
cat(title, " ", padding, "\n", sep = "")
}
rule("Important output")
Important output -----
rule("Valuable output", pad = "-+")
Valuable output -+-+-+-+-+-+
rule("Vital output", pad = "-+-")
Vital output -+--+--+--+--+--+--+-
Note that in the second output, there is only a single - at the end.
3. What does the trim
argument to mean()
do? When might you use it?
The trim
arguments trims a fraction of observations from each end of the vector (meaning the range) before calculating the mean. This is useful for calculating a measure of central tendency that is robust to outliers.
4. The default value for the method argument to cor()
is c("pearson", "kendall", "spearman")
. What does that mean? What value is used by default?
It means that the method argument can take one of those three values. The first value, "pearson"
, is used by default.
LS0tDQp0aXRsZTogIkZ1bmN0aW9uIGFyZ3VtZW50cyINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQotLS0NCg0KYGBge3J9DQpzdXBwcmVzc1BhY2thZ2VTdGFydHVwTWVzc2FnZXMobGlicmFyeSgidGlkeXZlcnNlIikpDQpgYGANCg0KIyMjIDEuIFdoYXQgZG9lcyBgY29tbWFzKGxldHRlcnMsIGNvbGxhcHNlID0gIi0iKWAgZG8/IFdoeT8NCg0KVGhlIGBjb21tYXMoKWAgZnVuY3Rpb24gaW4gdGhlIGNoYXB0ZXIgaXMgZGVmaW5lZCBhcw0KDQpgYGB7cn0NCmNvbW1hcyA8LSBmdW5jdGlvbiguLi4pIHsNCiAgc3RyX2MoLi4uLCBjb2xsYXBzZSA9ICIsICIpDQp9DQpgYGANCg0KV2hlbiBgY29tbWFzKClgIGlzIGdpdmVuIGEgY29sbGFwc2UgYXJndW1lbnQsIGl0IHRocm93cyBhbiBlcnJvci4NCg0KYGBge30NCmNvbW1hcyhsZXR0ZXJzLCBjb2xsYXBzZSA9ICItIikNCiM+IEVycm9yIGluIHN0cl9jKC4uLiwgY29sbGFwc2UgPSAiLCAiKTogZm9ybWFsIGFyZ3VtZW50ICJjb2xsYXBzZSIgbWF0Y2hlZCBieSBtdWx0aXBsZSBhY3R1YWwgYXJndW1lbnRzDQpgYGANCg0KVGhpcyBpcyBiZWNhdXNlIHdoZW4gdGhlIGFyZ3VtZW50IGBjb2xsYXBzZWAgaXMgZ2l2ZW4gdG8gYGNvbW1hcygpYCwgaXQgaXMgcGFzc2VkIHRvIGBzdHJfYygpYCBhcyBwYXJ0IG9mIGAuLi5gLiBJbiBvdGhlciB3b3JkcywgdGhlIHByZXZpb3VzIGNvZGUgaXMgZXF1aXZhbGVudCB0bw0KDQpgYGB7fQ0Kc3RyX2MobGV0dGVycywgY29sbGFwc2UgPSAiLSIsIGNvbGxhcHNlID0gIiwgIikNCiM+RXJyb3IgaW4gc3RyX2MobGV0dGVycywgY29sbGFwc2UgPSAiLSIsIGNvbGxhcHNlID0gIiwgIik6IGZvcm1hbCBhcmd1bWVudCAiY29sbGFwc2UiIG1hdGNoZWQgYnkgbXVsdGlwbGUgYWN0dWFsIGFyZ3VtZW50cw0KYGBgDQoNCkhvd2V2ZXIsIGl0IGlzIGFuIGVycm9yIHRvIGdpdmUgdGhlIHNhbWUgbmFtZWQgYXJndW1lbnQgdG8gYSBmdW5jdGlvbiB0d2ljZS4NCg0KT25lIHdheSB0byBhbGxvdyB0aGUgdXNlciB0byBvdmVycmlkZSB0aGUgc2VwYXJhdG9yIGluIGBjb21tYXMoKWAgaXMgdG8gYWRkIGEgY29sbGFwc2UgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uLg0KDQpgYGB7fQ0KY29tbWFzIDwtIGZ1bmN0aW9uKC4uLiwgY29sbGFwc2UgPSAiLCAiKSB7DQogIHN0cl9jKC4uLiwgY29sbGFwc2UgPSBjb2xsYXBzZSkNCn0NCmBgYA0KDQojIyMgRXhlcmNpc2UgMi4gSXTigJlkIGJlIG5pY2UgaWYgeW91IGNvdWxkIHN1cHBseSBtdWx0aXBsZSBjaGFyYWN0ZXJzIHRvIHRoZSBwYWQgYXJndW1lbnQsIGUuZy4gYHJ1bGUoIlRpdGxlIiwgcGFkID0gIi0rIilgLiBXaHkgZG9lc27igJl0IHRoaXMgY3VycmVudGx5IHdvcms/IEhvdyBjb3VsZCB5b3UgZml4IGl0Pw0KDQpUaGlzIGlzIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBydWxlIGZ1bmN0aW9uIGZyb20gdGhlIGNoYXB0ZXIuDQoNCmBgYHtyfQ0KcnVsZSA8LSBmdW5jdGlvbiguLi4sIHBhZCA9ICItIikgew0KICB0aXRsZSA8LSBwYXN0ZTAoLi4uKQ0KICB3aWR0aCA8LSBnZXRPcHRpb24oIndpZHRoIikgLSBuY2hhcih0aXRsZSkgLSA1DQogIGNhdCh0aXRsZSwgIiAiLCBzdHJfZHVwKHBhZCwgd2lkdGgpLCAiXG4iLCBzZXAgPSAiIikNCn0NCnJ1bGUoIkltcG9ydGFudCBvdXRwdXQiKQ0KYGBgDQoNCllvdSBjYW4gY3VycmVudGx5IHN1cHBseSBtdWx0aXBsZSBjaGFyYWN0ZXJzIHRvIHRoZSBwYWQgYXJndW1lbnQsIGJ1dCB0aGUgb3V0cHV0IHdpbGwgbm90IGJlIHRoZSBkZXNpcmVkIHdpZHRoLiBUaGUgYHJ1bGUoKWAgZnVuY3Rpb24gZHVwbGljYXRlcyBwYWQgYSBudW1iZXIgb2YgdGltZXMgZXF1YWwgdG8gdGhlIGRlc2lyZWQgd2lkdGggbWludXMgdGhlIGxlbmd0aCBvZiB0aGUgdGl0bGUgYW5kIGZpdmUgZXh0cmEgY2hhcmFjdGVycy4gVGhpcyBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdCBwYWQgaXMgb25seSBvbmUgY2hhcmFjdGVyLiBJZiBwYWQgd2VyZSB0d28gY2hhcmFjdGVyLCB0aGUgb3V0cHV0IHdpbGwgYmUgYWxtb3N0IHR3aWNlIGFzIGxvbmcuDQoNCmBgYHtyfQ0KcnVsZSgiVmFsdWFibGUgb3V0cHV0IiwgcGFkID0gIi0rIikNCmBgYA0KDQpPbmUgd2F5IHRvIGhhbmRsZSB0aGlzIGlzIHRvIHVzZSBgc3RyX3RydW5jKClgIHRvIHRydW5jYXRlIHRoZSBzdHJpbmcsIGFuZCBgc3RyX2xlbmd0aCgpYCB0byBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYWQgYXJndW1lbnQuDQoNCmBgYHtyfQ0KcnVsZSA8LSBmdW5jdGlvbiguLi4sIHBhZCA9ICItIikgew0KICB0aXRsZSA8LSBwYXN0ZTAoLi4uKQ0KICB3aWR0aCA8LSBnZXRPcHRpb24oIndpZHRoIikgLSBuY2hhcih0aXRsZSkgLSA1DQogIHBhZGRpbmcgPC0gc3RyX2R1cCgNCiAgICBwYWQsDQogICAgY2VpbGluZyh3aWR0aCAvIHN0cl9sZW5ndGgodGl0bGUpKQ0KICApICU+JQ0KICAgIHN0cl90cnVuYyh3aWR0aCkNCiAgY2F0KHRpdGxlLCAiICIsIHBhZGRpbmcsICJcbiIsIHNlcCA9ICIiKQ0KfQ0KcnVsZSgiSW1wb3J0YW50IG91dHB1dCIpDQpydWxlKCJWYWx1YWJsZSBvdXRwdXQiLCBwYWQgPSAiLSsiKQ0KcnVsZSgiVml0YWwgb3V0cHV0IiwgcGFkID0gIi0rLSIpDQpgYGANCg0KTm90ZSB0aGF0IGluIHRoZSBzZWNvbmQgb3V0cHV0LCB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIC0gYXQgdGhlIGVuZC4NCg0KIyMjIDMuIFdoYXQgZG9lcyB0aGUgYHRyaW1gIGFyZ3VtZW50IHRvIGBtZWFuKClgIGRvPyBXaGVuIG1pZ2h0IHlvdSB1c2UgaXQ/DQoNClRoZSBgdHJpbWAgYXJndW1lbnRzIHRyaW1zIGEgZnJhY3Rpb24gb2Ygb2JzZXJ2YXRpb25zIGZyb20gZWFjaCBlbmQgb2YgdGhlIHZlY3RvciAobWVhbmluZyB0aGUgcmFuZ2UpIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgbWVhbi4gVGhpcyBpcyB1c2VmdWwgZm9yIGNhbGN1bGF0aW5nIGEgbWVhc3VyZSBvZiBjZW50cmFsIHRlbmRlbmN5IHRoYXQgaXMgcm9idXN0IHRvIG91dGxpZXJzLg0KDQojIyMgNC4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBtZXRob2QgYXJndW1lbnQgdG8gYGNvcigpYCBpcyBgYygicGVhcnNvbiIsICJrZW5kYWxsIiwgInNwZWFybWFuIilgLiBXaGF0IGRvZXMgdGhhdCBtZWFuPyBXaGF0IHZhbHVlIGlzIHVzZWQgYnkgZGVmYXVsdD8NCg0KSXQgbWVhbnMgdGhhdCB0aGUgbWV0aG9kIGFyZ3VtZW50IGNhbiB0YWtlIG9uZSBvZiB0aG9zZSB0aHJlZSB2YWx1ZXMuIFRoZSBmaXJzdCB2YWx1ZSwgYCJwZWFyc29uImAsIGlzIHVzZWQgYnkgZGVmYXVsdC4NCg==