我想引導它包含多個列和行變量的大型雙向數據集。我必須保留行和列變量。結果應該是包含每個行變量的所有列變量的引導的列表。我提供了所需的代碼來回答我的問題,但我認爲這不是優雅。我將不勝感激一個更好,更快的代碼。以下是雙向數據集的簡化再創造:
rm(list=ls())
data <- 1:72
創建一個雙向的矩陣數據:
charDataDiff <- matrix(data, nrow=9,ncol=8)
varNames <- c("A", "B", "C","A", "B", "C","A", "B", "C")
添加字符列到charDataDiff矩陣:
charDataDiff <- cbind(varNames ,data.frame(charDataDiff))
加列名:
colnames(charDataDiff) <- c("patchId","s380","s390","s400","s410","s420","s430","s440","s450")
使用行變量「patchId」作爲條件來分隔數據。這將創建三個列表:每個變量
idColor <- c("A", "B", "C")
(patchSpectrum <- lapply(idColor, function(idColor) charDataDiff[charDataDiff$patchId==idColor,]))
創建函數sampleBoot採樣patchSpectrum
sampleBoot <- function(nbootstrap=2, patch=3){
return(lapply(1:nbootstrap, function(i)
{patchSpectrum[[patch]][sample(1:nrow(patchSpectrum[[patch]]),replace=TRUE),]}))}
列表中的「K」回答我的問題。但是,我認爲我的代碼對於大型數據集和大型引導程序來說很慢。我只對三個行變量進行10次迭代。更快更優雅的代碼表示讚賞。
numBoots <- 10
for (i in 1: numBoots)
k <- lapply(1:3, function(n)
do.call(rbind, lapply(sampleBoot(i, n), function(x) apply(x[-1], 2, median))))
k
在你的最後一個循環,它看起來像'k'每次迭代被覆蓋,所以只得到'對'i == numBoots' k'。這是打算嗎? – flodel