【问题标题】:Returning error message for my function if the argument isn't relevant如果参数不相关,则返回我的函数的错误消息
【发布时间】:2020-03-28 00:36:04
【问题描述】:

我正在练习编写函数。我写了一个函数,根据分隔符将一列分成不同的列(例如,“:”,“/”)。

如果分隔符不相关,我正在尝试让函数返回错误消息。

这是我正在处理的部分:

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

  colnum <- df[ , colnum]

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

}

即使分隔符相关,这也会返回错误消息。我该如何处理?谢谢你。

【问题讨论】:

  • 您正在对整个数据集应用grepl。应该是向量grepl(sep, df[, colnum])
  • 我将其更改为if (!grepl(sep, df[ , colnum])) stop(),现在我收到此错误消息:Error in [.data.frame(df, , colnum) : undefined columns selected
  • 另外,if 从 grepl 中查找长度 1 而不是全长。你可能需要用any 包裹起来

标签: r function


【解决方案1】:

在 OP 的代码中,通过分配 colnum &lt;- 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 = ",") : 

数据

dat <- data.frame(col1 = 1:5, col2 = '1:2:3', stringsAsFactors = FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2020-11-11
    • 2021-06-02
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多