以下、c_data
と呼ばれるデータフレームを作成します。変数ri
には値が1つ欠けていることに注意してください。関数のNULL出力はどこから来ますか?
次に、データをチェックする関数を記述します。 1つのステップは、ri
にデータがない場合に機能を停止することです。 (私は機能から私の質問に関連する構文を削除しました)。
出力を提供します。
期待される結果に加えてNULL
を出力する点を除いて、この関数は期待どおりに機能します。なぜそれがNULL
を印刷しますか?
#create data to test function
r <- c(.15, .10, NA)
N <- c(100, 86, 56)
chrvar <- c("a", "b", "c")
c_data <- as.data.frame(cbind(r,N, chrvar))
#change variable type from factor to numeric
c_data$r <- as.numeric(c_data$r)
#change N variable type from factor to integer
c_data$N <- as.integer(c_data$N)
#change chrvar from factor to character
c_data$chrvar <- as.character(c_data$chrvar)
str(c_data)
myFun <- function(ri= ri, ni=ni, data = data)
{
#add ri and ni to the data frame named data
data$ri <- ri
data$ni <- ni
#does ri have any missing data
num.missing.ri <- 0
for (i in 1:nrow(data))
{
if (is.na(data$ri[i] == TRUE)) num.missing.ri = num.missing.ri + 1
}
if(num.missing.ri != 0)
{
print(cat("Number of missing values in ri is", num.missing.ri,"\n"))
stop("ri has missing data. myFun is terminated.")
}
}
myFun(ri = r, ni = N, data = c_data)
これは、この出力を生成します
myFun(ri = r, ni = N, data = c_data)
##Number of missing values in ri is 1
##NULL
## Error in myFun(ri = r, ni = N, data = c_data) :
## ri has missing data. myFun is terminated.
なぜそれがNULLを印刷していますか?
'sum(is.na(data $ column)) 'を使用して列の欠損値の数を取得することができます – adibender
これは、関数が実際に値を返さず、その状態でおそらく関数を定義するときに 'return'コマンドを実装しようとしますか? – cgage
カップルのもの:最初に私は気付いた(is.na(データ$ ri [i] == TRUE))は、値が真であるかどうかをチェックしています。あなたの角括弧は一致しません。あなたがやっていることは、私の前で述べたように、1行で行うことができます。 – Marsenau