1
可変列名を使用して、より速い行ごとのt.test結果を得るためにdata.tableの本来の速度を使用できますか?以下は私の現在のコードであり、1000行ごとに数秒かかる。R data.tableの各行にスピーディーなt.test
slow.diffexp <- function(dt, samples1, samples2) {
for (i in 1:nrow(dt)) {
if (round(i/1000)==i/1000) {
cat(i, "\n");
}
a <- t.test(dt[i, samples1, with=FALSE],
dt[i, samples2, with=FALSE]);
set(dt, i, "tt.p.value", a$p.value)
set(dt, i, "tt.mean1", a$estimate[1])
set(dt, i, "tt.mean2", a$estimate[2])
}
}
test.dt <- data.table(V1=sample(1000, 100000, replace=TRUE));
for (i in 2:20) {
colname <- paste0("V", i);
test.dt[ , (colname):=sample(1000, 100000, replace=TRUE)];
}
samples1 <- sample(names(test.dt), size=10);
samples2 <- setdiff(names(test.dt), samples1);
slow.diffexp(test.dt, samples1, samples2);
私は以下の関連記事を見てきました:
- Paired t-test for each row of a data table:ソリューションを持っているが、我々はより速く得ることができますか?
- Doing t.test for columns for each row in data set:data.tableは使用しません。また、私はセットが<よりも高速であるというこのアイデアを持っているので、私はセットを()を使用していますが遅い
- data.framesのために...
'data.table'は通常、列単位の操作で高速です。 – lmo
あなたが必要とする特定のものだけを行う 't.test.default'の独自のparedバージョンを作成すると、より多くのマイレージが得られるかもしれません。あるいは、p値のランダムなサンプルを単純に描くことができます。これはほとんど瞬間的です。 – joran