调试用户定义的函数

时间:2013-01-24 15:28:51

标签: r

对于“Baltimore homicides”的数据集 需要创建一个带有字符串的函数,例如“shoot”,并返回一个整数表示“拍摄”受害者的数量。 我写了以下函数,但收到错误

  

错误:“}”中的意外“}”

     

错误:找不到对象'counti'

我也无法弄清楚 == Null 是否正确

count <- function(cause = NULL) {

## Check that "cause" is non-NULL; else throw error
if cause==NULL
{
stop()
print("no cause provided")
}

## Read "homicides.txt" data file
homicides <- readLines("homicides.txt")
## Extract causes of death
i <- grep(cause, homicides)  ##get indices of cause
counti <- lenghth(i) ##get count of indices
## Check that specific "cause" is allowed; else throw error
if counti=0
{
stop()
print("no such cause")
}

## Return integer containing count of homicides for that cause      
return(counti)  
}

这是我编辑后的工作功能,谢谢你们

count <- function(cause = NULL) {
  if(missing(cause) | is.null(cause)) stop("no cause provided")
  homicides <- readLines("homicides.txt")
  i=length(grep(cause, homicides))
  if(i==0) stop("no cause found")
  return(i)
  }

1 个答案:

答案 0 :(得分:4)

通过这样做,您可以将功能简化为2行:

count <- function(cause = NULL, data) {
  if(is.null(cause)) stop("no cause provided")
  length(grep(cause, data))
}

data <- c("murder", "some other cause")

count("murder", data)
[1] 1

请注意以下原则:

  • R具有许多功能语言的功能。这意味着每个函数应尽可能仅依赖于您传递的参数。
  • 如果您的代码中有错误,请将其简化为最短的版本,修复错误,然后从那里构建。

另外,请保留stop()以获得真正致命的错误。在数据中找不到搜索字符串不是错误,它只是意味着找不到原因。您不希望代码停止。最多发出message()warning()