Возврат сообщения об ошибке для моей функции, если аргумент не имеет отношения - PullRequest
1 голос
/ 28 марта 2020

Я практикую написание функций. Я написал функцию, которая разбивает столбец на разные столбцы в соответствии с разделителем (например, ":", "/").

Я пытаюсь, чтобы функция возвращала сообщение об ошибке, если разделитель не имеет отношения.

Вот часть, над которой я работаю:

myfunc <- function(df, colnum = 2, into = c("a", "b", "c"), sep = ":") {

  colnum <- df[ , colnum]

  hold <- strsplit(colnum, split = sep)
  if (!grepl(sep, df)) stop()

}

Это возвращает сообщение об ошибке, даже если разделитель имеет значение. Как я могу подойти к этому? Спасибо.

1 Ответ

1 голос
/ 28 марта 2020

В коде OP 'colnum' обновляется значениями столбца, присваивая colnum <- df[,colnum]. Вместо этого его можно изменить на другое имя объекта. Во-вторых, вывод grepl length будет таким же, как количество строк в наборе данных, и if/else предполагает, что ввод будет иметь длину 1, а вывод будет также иметь длину 1. В этом случае, возможно, мы можем заключить в any условие, чтобы проверить, есть ли какие-либо sep, которые не :

myfunc <- function(df, colnum = 2, into = c("a", "b", "c"), sep = ":") {

    colvec <- df[ , colnum] 

    hold <- strsplit(colvec, split = sep)
    if (any(!grepl(sep, df[, colnum]))) stop()
    hold


   }



myfunc(dat)
#[[1]]
#[1] "1" "2" "3"

#[[2]]
#[1] "1" "2" "3"

#[[3]]
#[1] "1" "2" "3"

#[[4]]
#[1] "1" "2" "3"

#[[5]]
#[1] "1" "2" "3"

myfunc(dat, sep=",")
#Error in myfunc(dat, sep = ",") : 

data

dat <- data.frame(col1 = 1:5, col2 = '1:2:3', stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...