以下のコードは、私がしたいことについてあなたにいくつかのアイデアを与えるでしょう。実際には、帰属遺伝学ファイルを扱っています。全体で約1000万のSNP(変数)が数千人に帰属していました。私は個々の変数ごとに回帰を実行したい。個々のモデルは計算上は些細な作業ですが、問題は私が巨大なファイルを扱い、これらのモデルを1億回実行していることです。Microsoft Azure HDInsight上のRサーバー - 非常に幅広いデータを扱います。 - rxExec?
マイクロソフトによると、HDInsight Rサーバーは長いデータ用に最適化されています。 1000個の変数と1億の観測値があれば、はるかに簡単になるでしょう。
私は巨大なファイルをいくつかに分割したいと思います。たとえば、100万SNPの1データセットを100,000 SNPの10データセットに分割します。
ここに実行したいコードがあります。最後の行は機能しません。これら10個の小さなデータセットをそれぞれ別のノードに送信し、共通の機能を実行する方法を知る必要があります。一般的には、mclapply()関数を再現したいが、複数のコアで実行する代わりに、複数のワーカーノードで実行する。
通常、サーバーが動作する方法は、自動的にいくつかのセクションに行を切り刻む、およびタスクをそのように分散させることである、それは数千の観測
col <- 10000
row <- 500
df <- data.frame(matrix(rnorm(row*col),nrow=row))
caco <- sample(0:1, row, replace=T)
# The way I would do it locally for a normal dataset
fun <- function(x){
var <- df[[x]]
model <- summary(glm(caco ~ var, family="binomial"))
p <- c(x,coef(model)["var","Pr(>|z|)"])
return(p)
}
stuff <- names(df)
results <- lapply(stuff,fun)
# or
results <- mclapply(stuff,fun)
### what I want to do
# Split into several data frames
# possibly to other data manipulation, whatever is necessary
df1 <- df[,1:2000]
df2 <- df[,2001:4000]
df3 <- df[,4001:6000]
df4 <- df[,6001:8000]
df5 <- df[,8001:10000]
# I want to send each worker node one of these datasets, so each runs 2000 models
# this code does not work -
# but I think this is the general direction I want to go, using the
# rxExec function
out <- rxExec(fun, rxElemArg(stuff), execObjects=c("df1","df2","df3","df4")