rturf 5: writing a function, and using ifelse

It is convenient to write functions that will make calculations or produce specific output. In this rturf screencast, I demonstrate the creation of a brede function that when given two inputs, which should be the uphill and downhill ball roll distances in inches, returns the green speed in feet.

# function to calculate green speed by Brede equation, input is in inches
brede <- function(a, b) {
  speed <- (2 * a * b) / (a + b) / 12
  return(speed)
}

That function is given the name brede, and it has two inputs, which I called a and b. They could have been x and y, or u and d, or uphill and downhill, or roll1 and roll2. They represent the uphill and downhill direction of ball roll when using the stimpmeter. When that function is used, it returns the green speed in feet after applying the Brede correction.

I also showed the ifelse function by correcting the stimpmeter measurements that were made from the 2x notch.

d$speed1 <- ifelse(d$x1x2 == 2, d$speed * 2, d$speed)

The d data frame has a column named x1x2 with integer values of 1 or 2 in it. If the value is 1, it means the measurements in that row were taken by rolling the balls from the standard notch on the stimpmeter. If the value is 2, the measurements in that row represent balls that were rolled from the short notch, and the green speed calculated from those rolls should be multiplied by two.

I find the ifelse function useful to make these type of corrections.

It evaluates the value of x1x2 in each row of the data frame to determine if the value is 2. If the value is 2—meaning the balls were rolled from the short notch and the calculated green speed must be multiplied by two—then the new speed1 variable will be the green speed multiplied by two. However, if the value of x1x2 is not 2, then the speed1 variable will be the green speed already calculated, and won’t be multiplied by two.

Micah Woods
Micah Woods

Scientist, author, consultant, and founder of the Asian Turfgrass Center

Related