Skip to content

Commit

Permalink
Neal's recommendation to abstract sd/sd_between error checking into h…
Browse files Browse the repository at this point in the history
…elper function.
  • Loading branch information
aaronrudkin committed Jan 22, 2018
1 parent 6aa9015 commit fbc6bc4
Showing 1 changed file with 22 additions and 32 deletions.
54 changes: 22 additions & 32 deletions R/draw_normal_icc.R
Expand Up @@ -136,41 +136,13 @@ draw_normal_icc = function(mean = 0,
}
}

# Sanity check sd
if(!is.null(sd)) {
if(!length(sd) %in% c(1, number_of_clusters)) {
stop("`sd` must be either a number or one number per cluster.")
}
if(!is.vector(sd)) {
stop("`sd` must be a number or vector of numbers.")
}
if(any(!is.numeric(sd))) {
stop("`sd` must be a number or vector of numbers.")
}
if(any(sd < 0)) {
stop("Numbers provided to `sd` must be non-negative.")
}
}

# Sanity check sd_between
if(!is.null(sd_between)) {
if(!length(sd_between) %in% c(1, number_of_clusters)) {
stop("`sd_between`, if provided, must be either a number or one number per cluster.")
}
if(!is.vector(sd_between)) {
stop("`sd_between`, if provided, must be a number or vector of numbers.")
}
if(any(!is.numeric(sd_between))) {
stop("`sd_between`, if provided, must be a number or vector of numbers.")
}
if(any(sd_between < 0)) {
stop("Numbers provided to `sd_between` must be non-negative.")
}
}

# Get number of clusters
number_of_clusters = length(unique(clusters))

# Sanity check sd/sd_between
check_sd_error_helper(sd, "sd", number_of_clusters)
check_sd_error_helper(sd_between, "sd_between", number_of_clusters)

# Fill in the unfilled number at this point.
if(is.null(sd)) {
sd = sqrt( ((1 - ICC) * sd_between^2) / ICC )
Expand Down Expand Up @@ -204,3 +176,21 @@ draw_normal_icc = function(mean = 0,

individual_mean + alpha_individual + epsilon_ij
}

check_sd_error_helper = function(data, data_name, number_of_clusters) {
# Sanity check sd or sd_between
if(!is.null(data)) {
if(!length(data) %in% c(1, number_of_clusters)) {
stop("`", data_name, "` must be either a number or one number per cluster.")
}
if(!is.vector(data)) {
stop("`", data_name, "` must be a number or vector of numbers.")
}
if(any(!is.numeric(data))) {
stop("`", data_name, "` must be a number or vector of numbers.")
}
if(any(data < 0)) {
stop("Numbers provided to `", data_name, "` must be non-negative.")
}
}
}

0 comments on commit fbc6bc4

Please sign in to comment.