在r中重复采样循环

时间:2016-03-10 10:20:31

标签: r

我正在尝试从数据框进行随机抽样,其中抽样取决于已采样项目的属性。在下面的代码中,我试图从“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))
}

1 个答案:

答案 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
 }

希望这个例子有所帮助。