ないあなたのデータはどのように大きなであることを確認してください。私はパフォーマンスを最適化するためにベクトル化したいと思う。ここにはslqdf
を使用して解決策があります。
(私はdata.table
のような選択肢を探したが、私は参加のそれぞれの側にあなたの条件そのY!= Yとの直積を実行するために成功しませんでした...)
まず私は、おもちゃのデータフレームを作成し、あなたのコードで実行してください。
グラムのための結果が
library(tilting)
data <- data.frame(p1=seq(1, 6), p2=seq(12, 17), p3=seq(14,9), Y=c(rep(0,3), rep(1,3)))
g <- vector();
n <- nrow(data)
p <- 3
for(i in 1:n){
temp <- t(data[data$Y[i] != data$Y, 1:p]) - as.vector(t(data[i,1:p]))
g[i]<- min(col.norm(temp))
}
、
[1] 5.196152 3.464102 1.732051 1.732051 3.464102 5.196152
その後、私はrownames
を使用してデータにインデックスを追加し、デカルト積を実行し、
data$idx <- rownames(data)
library(sqldf)
predictors <- c("p1", "p2", "p3")
cart <- sqldf(paste0("select d1.idx,",
paste("d1", predictors, collapse=",", sep="."), ",",
paste("d2", predictors, collapse=",", sep="."),
" from data as d1",
" join data as d2",
" on d1.Y != d2.Y"))
その後、私はあなたの関数を計算し、
cart$d <- sqrt(rowSums((cart[, 2:4] - cart[, 5:7])^2))
であり、最小化は結果を集計するのと同じです。
> aggregate(cart, by=list(cart$idx), FUN=min)[, c("idx", "d")]
idx d
1 1 5.196152
2 2 3.464102
3 3 1.732051
4 4 1.732051
5 5 3.464102
6 6 5.196152
私が言ったように、あなたの目的は分かりませんが、それが助けてくれることを願っています。
こんにちは! StackOverflowはラテックスを視覚化しませんが、回避策として[this](http://www.codecogs.com/latex/eqneditor.php)を使用することができます(結果の式をコピーして貼り付けてください)。今すぐ読むことができないので、数式を修正してください。また、あなたの機能(ベクトル化されているかどうか)を試してみてください。ありがとう。 – lrnzcig
アドバイスをいただきありがとうございます。私はこの数式を修正し、今も自分の試みを追加しました。 – ChuckP