0

对于“巴尔的摩凶杀案”数据集,需要创建一个函数,该函数接受一个字符串,例如“射击”,并返回一个整数,表示“射击”的受害者人数。我写了以下函数,但我收到错误

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

错误:找不到对象“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)
  }
4

1 回答 1

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()真正致命的错误。在您的数据中找不到搜索字符串不是错误,它只是意味着找不到原因。您不希望您的代码停止。最多发出 amessage()或 a warning()

于 2013-01-24T15:49:39.187 回答