Elegant way to check for missing packages and install them?

Yes. If you have your list of packages, compare it to the output from installed.packages()[,”Package”] and install the missing packages. Something like this: list.of.packages <- c(“ggplot2”, “Rcpp”) new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,”Package”])] if(length(new.packages)) install.packages(new.packages) Otherwise: If you put your code in a package and make them dependencies, then they will automatically be installed when you … Read more

Extracting specific columns from a data frame

You can subset using a vector of column names. I strongly prefer this approach over those that treat column names as if they are object names (e.g. subset()), especially when programming in functions, packages, or applications. # data for reproducible example # (and to avoid confusion from trying to subset `stats::df`) df <- setNames(data.frame(as.list(1:5)), LETTERS[1:5]) … Read more

Why is `[` better than `subset`?

This question was answered in well in the comments by @James, pointing to an excellent explanation by Hadley Wickham of the dangers of subset (and functions like it) [here]. Go read it! It’s a somewhat long read, so it may be helpful to record here the example that Hadley uses that most directly addresses the … Read more

How to add leading zeros?

The short version: use formatC or sprintf. The longer version: There are several functions available for formatting numbers, including adding leading zeroes. Which one is best depends upon what other formatting you want to do. The example from the question is quite easy since all the values have the same number of digits to begin … Read more

How can two strings be concatenated?

paste() is the way to go. As the previous posters pointed out, paste can do two things: concatenate values into one “string”, e.g. > paste(“Hello”, “world”, sep=” “) [1] “Hello world” where the argument sep specifies the character(s) to be used between the arguments to concatenate, or collapse character vectors > x <- c(“Hello”, “World”) … Read more

How to find the statistical mode?

One more solution, which works for both numeric & character/factor data: Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } On my dinky little machine, that can generate & find the mode of a 10M-integer vector in about half a second. If your data set might have multiple modes, the above solution takes the … Read more

How to sum a variable by group

Using aggregate: aggregate(x$Frequency, by=list(Category=x$Category), FUN=sum) Category x 1 First 30 2 Second 5 3 Third 34 In the example above, multiple dimensions can be specified in the list. Multiple aggregated metrics of the same data type can be incorporated via cbind: aggregate(cbind(x$Frequency, x$Metric2, x$Metric3) … (embedding @thelatemail comment), aggregate has a formula interface too aggregate(Frequency … Read more

How to write trycatch in R

Well then: welcome to the R world 😉 Here you go Setting up the code urls <- c( “http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html”, “http://en.wikipedia.org/wiki/Xz”, “xxxxx” ) readUrl <- function(url) { out <- tryCatch( { # Just to highlight: if you want to use more than one # R expression in the “try” part then you’ll have to # use … Read more

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)