Skip to content

Commit

Permalink
Merge pull request #132 from DeclareDesign/add-comma-error
Browse files Browse the repository at this point in the history
add comma error
  • Loading branch information
acoppock committed Jun 4, 2018
2 parents bbb1267 + 11a1ea5 commit 4fdce29
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 7 deletions.
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ importFrom(rlang,lang_args_names)
importFrom(rlang,lang_modify)
importFrom(rlang,lang_name)
importFrom(rlang,quo_name)
importFrom(rlang,quo_squash)
importFrom(rlang,quo_text)
importFrom(rlang,quos)
importFrom(stats,ave)
Expand Down
22 changes: 15 additions & 7 deletions R/aaa_fabricate.R
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,7 @@
#' by=join(ps_quality, ss_quality, rho = 0.5),
#' student_quality = ps_quality + 3*ss_quality + rnorm(N)))
#' @seealso \code{\link{link_levels}}
#' @importFrom rlang quos quo_name eval_tidy lang_name lang_modify lang_args
#' @importFrom rlang lang_args_names
#' @importFrom rlang quos quo_name eval_tidy lang_name lang_modify lang_args lang_args_names quo_squash
#' is_lang get_expr
#'
#' @export
Expand All @@ -106,21 +105,30 @@ fabricate <- function(..., data = NULL, N = NULL, ID_label = NULL) {
# The user did not seem to do one of the three possible things we can do.
# Maybe they anonymously passed data or N.
if (!explicit_data_supplied && !explicit_n_supplied) {

first_unnamed_arg <- which(names(data_arguments) == "" &
call_not_level_call(data_arguments))[1]


# Let's check the first unnamed argument.
if(!is.na(first_unnamed_arg) &&
first_unnamed_arg <= length(data_arguments)) {
if (!is.na(first_unnamed_arg) &&
first_unnamed_arg <= length(data_arguments)) {

# check if the first unnamed arg is empty (probably misplaced comma)
if (quo_squash(data_arguments[[first_unnamed_arg]]) == "") {
stop("There appears to be a blank argument. Is there a misplaced comma?", call. = FALSE)
}

# Eval it; whether it's data or N, we don't need any environment
# from anything else. If it fails, not great.
evaluate_first_arg <- eval_tidy(data_arguments[[first_unnamed_arg]])

# If they supplied a list or data frame, they meant data.
if(is.list(evaluate_first_arg) || is.data.frame(evaluate_first_arg)) {
if (is.list(evaluate_first_arg) ||
is.data.frame(evaluate_first_arg)) {
data <- evaluate_first_arg
} else if(is.null(dim(evaluate_first_arg)) &&
is.numeric(evaluate_first_arg) &&
} else if (is.null(dim(evaluate_first_arg)) &&
is.numeric(evaluate_first_arg) &&
length(evaluate_first_arg) == 1) {
# If they supplied a number, they meant N, we think.
N <- evaluate_first_arg
Expand Down
7 changes: 7 additions & 0 deletions tests/testthat/test-misc.R
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,10 @@ test_that("Two separate types of unnamed variables", {
rnorm(N),
bob = rnorm(N))))
})

test_that("Unnamed level", {
expect_error(fabricate(my_level_1 = add_level(N = 5),
add_level(N = 5)))
})


0 comments on commit 4fdce29

Please sign in to comment.