3

私はRに非常に慣れていませんが、ここでもデータが奇妙になることがあるため、コードを修正するのに助けが必要です

だから私はこれに似たデータを持っています

Random  Price
11.23   0.68
66.77   0.51
68  0.46
78  0.51
88  0.32
89  0.51
90  0.27
91  0.65

これまでの私のコードは次のとおりです。

newdata <- data[ which(data$Random>=30
& data$Random < 50), ]
Pvalue<- lapply(1:length(dat), function(i){
if(length(dat[[i]][[4]])>1){
t.test(newdata$Price,dat[[i]][[4]])$p.value 
}else 'not enough observation'
})

'newdata'私のコードは基本的に、データからのデータと別のデータ セットの間で t.testを実行しますが、上記のサンプル データのように 30 から 50'dat' を持たない場合があります。dataしたがって、コードがエラーを返す代わりに、エラーを返すように変更するにはどうすればよいでしょうかNA

4

1 に答える 1

3

if/elseコンストラクトの使用方法は既に理解しています。1 つの testing を追加するかnrow(newdata)、次のように両方を組み合わせるだけです。

newdata <- subset(data, Random >= 30 &
                        Random < 50)
Pvalue <- lapply(dat, function(x){
  if (length(x[[4]]) > 1 & nrow(newdata) > 1) {
    t.test(newdata$Price, x[[4]])$p.value 
  } else NA
})

リストの代わりに数値ベクトルを置き換えるか、数値ベクトルを取得するlapply(...)こともできsapply(...)ます。vapply(..., numeric(1))そのためには、私のように置き換えることをお勧めし'not enough observation'ますNA。そうしないと、文字ベクトルになってしまう可能性があります。

于 2013-03-30T13:00:14.780 に答える