我正在尝试从数据框进行随机抽样,其中抽样取决于已采样项目的属性。在下面的代码中,我试图从“snr”中采样一个项目,然后是对应于第一个采样“snr”的随机“正确”值。然后我想基于“正确”的值来采样更大或更小的“snr”值。这个过程应该重复'y'次,并显示两个向量的输出,“snr”和长度为y的“正确”。
目前,如果该功能正在运行,我的R窗口停止响应并且它永远不会停止,或者我收到各种错误。
snr=c(2,4,6,2,4,6,2,4,6,2,4,6);correct=c(0.2,0.8,0.3,0.7,0.4,0.6,1,1,0,0.1,0.9,0)
data$snr=snr; data$correct=correct
samplesub2<-function(data.frame,y){ ### x is data frame, y is number of samples ###
repeat{
snrS<- sample(data.frame$snr,1,replace=TRUE)
correctS<- sample(data.frame$correct[data.frame$snr==snrS], 1, replace=TRUE)
if (correctS>0.5){
snrS<-sample(data.frame$snr[data.frame$snr==snrS+2],1,replace=TRUE)
correctS<- sample(data.frame$correct[data.frame$snr==snrS], 1, replace=TRUE)
}
else if (correctS<0.5){
snrS<- sample(data.frame$snr[data.frame$snr==snrS-2]),1,replace=TRUE)
correctS<- sample(data.frame$correct[data.frame$snr==snrS], 1, replace=TRUE)
}
if(length(snrS<y)
break
}
return(c(snrS,correctS))
}
答案 0 :(得分:0)
下面的代码会将虹膜数据集随机分成5个子集,每个样本有30个样本。总共有5组,每组5个子集。共有来自5组的25个子集。
for(i in 1:5){
iris_grp=split(iris,sample(rep(1:5,30)))
names(iris_grp) <- paste("iris",i,c("A","B","C","D","E"),sep="")
list2env(iris_grp, envir = .GlobalEnv)
print(iris_grp)
for(i in seq_along(iris_grp)) {
write.table(iris_grp[[i]], paste(names(iris_grp)[i], ".txt", sep = ""),
col.names = T, row.names = T, sep = "\t", quote = FALSE)
}
i=i+1
}
希望这个例子有所帮助。