В коде 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)