2016-03-10 2 views
0

Я пытаюсь сделать случайную выборку из фрейма данных, где выборка зависит от свойства уже отбираемого элемента. В приведенном ниже коде я пытаюсь пробовать элемент из «snr», а затем случайное «правильное» значение, соответствующее первому выбранному «snr». Затем я хочу выбрать большее или меньшее значение «snr», основанное на значении «правильный». Этот процесс следует повторять «y» раз и показывать вывод двух векторов, «snr» и «correct» длины y.Повторить цикл выборки в r

В настоящее время, если функция работает, мое 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

У вас есть два опечатка в вашем коде: 'if (length (snrS csgillespie

+0

Приветствия, хорошее место. – EER

ответ

0

Приведенный ниже код будет разделить набор диафрагмы случайным образом на 5 подмножеств с 30 образцами каждые 5 раз. Всего 5 групп с 5 подмножествами каждый. Всего 25 подмножеств из 5 групп.

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 
} 

Надеюсь, этот пример поможет.

Смежные вопросы