[R] Programming: loop versus vector oriented

Jan private jrheinlaender at gmx.de
Wed Sep 15 11:57:28 CEST 2010


Dear all,

I am new to R and to it's programming philosophy. The following function
is supposed to work on a vector, but I can't figure out how to do that
without looping through every element of it. Is there a more elegant
way?

Note: I have shortened it, so it is NOT correct from the pipe hydraulics
point of view

# Calculate wall friction factor
# reynolds: Reynolds number
# dk: relative roughness of pipe
lambda_wall <- function (reynolds, dk) {
  z <- 1
  result <- 0

  for (Re in reynolds) {
    if (Re <= 2320) {
      # Laminar flow
      lambda <- 64/Re
    } else if (Re < 65 * dk[z]) {
      # Turbulent flow
      if (Re < 1e+5) {
	lambda <- 0.3164 / sqrt(sqrt(Re))
      } else {
	lambda <- 0.309/(log10(Re/7))^2
      }
    } else {
      # Intermediate area
      lambdanew <- 1 / (2 * log10(3.71 * dk[z]))^2 # Start value
      iter <- 0
    
      repeat {
	lambda <- lambdanew
	lambdanew <- 1 / (2 * log10(2.51/(Re * sqrt(lambda)) + 0.27/dk[z]))^2
	iter <- iter + 1
	if ((abs(lambdanew - lambda) < 0.001) || (iter > 100)) break
      }
    
      lambda = lambdanew
    }
    
    result[z] <- lambda
    z <- z + 1
  }

  result
} # lambda_wall()



More information about the R-help mailing list