a <- ifelse(as.matrix(pvalue2) < .05, as.matrix(pvalue2), "normal")
a <- as.data.frame(a)
R はコンパイルされていない高水準言語であるため、for
ループが大きくなると非常に遅くなる傾向があります。代わりにベクトル化された関数 (低レベル言語で内部的にループを行う) を使用することで、コードを高速化し、読みやすくします。
実行例
> set.seed(123)
> pvalue2 <- matrix(runif(18)/10, 6, 3)
> pvalue2[sample(length(pvalue2), 4)] <- NA
> pvalue2 <- as.data.frame(pvalue2)
> pvalue2
V1 V2 V3
1 0.02875775 0.05281055 0.067757064
2 0.07883051 0.08924190 0.057263340
3 0.04089769 0.05514350 NA
4 0.08830174 0.04566147 0.089982497
5 0.09404673 NA NA
6 NA 0.04533342 0.004205953
> ifelse(as.matrix(pvalue2) < .05, as.matrix(pvalue2), "normal")
V1 V2 V3
[1,] "0.0287577520124614" "normal" "normal"
[2,] "normal" "normal" "normal"
[3,] "0.04089769218117" "normal" NA
[4,] "normal" "0.0456614735303447" "normal"
[5,] "normal" NA NA
[6,] NA "0.0453334156190977" "0.00420595335308462"