データフレーム内のすべての値を再計算するために、batcheffectという名前の独自の関数を作成します。この関数は、インポートとしてデータフレームのみを必要とします。最初に、関数で平均が計算され、次にデータフレーム内の各ポイントに対して計算が行われ、新しいデータフレームが作成されます。
batcheffect <- function (experiment){
corr<-list()
matrixexp<-as.matrix(experiment)
expmean <-mean(matrixexp)
for (i in 1:length(matrixexp)){
correction <- (matrixexp[i]-overallmean - expmean)+overallmean
corr[[i]]<- matrix(correction)
}
return(unlist(corr))
}
大きなデータフレームの場合、関数内のループは遅くなります。だから私はプロセスをスピードアップするためにsapplyまたはlapply関数を使用したいと思います。誰か提案がありますか?
ありがとう
更新:たとえば、次のようなデータフレームがありますdf <-data.frame(A = 1:10、B = 10:1、C = 11:20、C1 = 21:30、B1 = 31:40、A2 = 41 :50)
データフレーム内のすべての値の平均を計算します。データフレームは、行列df1 <-as.matrix(df)overallmean <-mean(df1)に変換されます。
データの最初の目標は、colnamesによってサブセットを作成することです。Aのグループ、Bのグループ、Cのグループの3つのグループを生成します。サブセットは次のコードで定義されています。
"selectexperiments" <- function (partialname, data)
{
result <- data[,grep(partialname, colnames(data))]
return(result)
}
A<-selectexperiments('A', df)
B<-selectexperiments('B', df)
C<-selectexperiments('C', df)
3つのグループが作成されます。eggroup AIの各値について、次の合計を計算します:(値-overallmean-meanofthegroup)+overallmean。したがって、このバッチ効果関数を作成します。
"batcheffect" <- function (group)
{
corr<-list()
matrixexp<-as.matrix(group)
expmean <-mean(matrixexp) #mean of the group
for (i in 1:length(matrixexp)){
correction <- (matrixexp[i]-overallmean - expmean)+overallmean
corr[[i]]<- matrix(correction)
}
return(unlist(corr))
}
Abatch<-batcheffect(A)
結果はOKですが、結果をデータフレームとして返します。そして、私自身のデータでは、この関数は本当に遅いので、mabyには何かをsapplyするような高速化の方法があると思いました。