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()本当に致命的なエラーを保持します。データ内に検索文字列が見つからないことはエラーではなく、単に原因が見つからなかったことを意味します。コードを停止させたくありません。message()多くても aまたは aを発行しwarning()ます。

于 2013-01-24T15:49:39.187 に答える