2016-07-26 2 views
0

Я хочу использовать runif для следующего набора данных:Использование runif в г

LB UB N 
    500 600 20 
    600 700 30 
    700 800 1234 
    ... 

превратили столбцы векторов:

c1<- as.list(d2[,c("N")]) 
    min=seq(500,2800,100) 
    min=as.vector(min) 
    max=seq(600,2900,100) 
    max=as.vector(max) 

Перебор:

for(i in seq(1,3,1)) 
{ 
    p<- runif(c1[[i]],min=min[[i]],max=max[[i]]) 
} 

I необходимо, чтобы n, min & max быть чо sen динамически из самих данных. Может кто-нибудь помочь?

+0

'' min' и max'are функции. Возможно, предпочтительнее использовать другие имена переменных. – nya

ответ

1

Связывание непосредственно к кадру данных, содержащий ваши границы и номер образца (в данном примере, только с помощью 3 строки вы приведенные выше):

df <- read.table(text = 'LB UB N 
         500 600 20 
         600 700 30 
         700 800 1234', 
       header = TRUE) 

p <- list() 
for(i in 1:nrow(df)) { 
    p[[i]] <- runif(df$N[i], min = df$LB[i], max = df$UB[i]) 
} 

str(p) 
# List of 3 
# $ : num [1:20] 506 578 526 566 522 ... 
# $ : num [1:30] 674 681 648 614 615 ... 
# $ : num [1:1234] 782 744 746 744 784 ... 
1

Вы ищете Map перебирать кадра данных :

with(df, Map(runif, N, LB, UB)) 
#List of 3 
# $ : num [1:20] 573 543 552 535 571 ... 
# $ : num [1:30] 691 655 642 640 695 ... 
# $ : num [1:1234] 703 739 705 705 759 ... 
0

Вы могли бы также пойти на apply:

set.seed(123) 
l <- apply(df,1,function(x) runif(x[3],min=x[1],max=x[2])) 

Или с помощью by:

l <- by(df,1:nrow(df),function(x) runif(x$N,min=x$LB,max=x$UB)) 

#lapply(l,head) 

# [[1]] 
# [1] 528.7578 578.8305 540.8977 588.3017 594.0467 504.5556 ... 

# [[2]] 
# [1] 688.9539 669.2803 664.0507 699.4270 665.5706 670.8530 ... 

# [[3]] 
# [1] 704.5831 744.2200 779.8925 712.1899 756.0948 720.6531 ... 
+0

Все коды работают нормально, когда я читаю данные в виде таблицы, но в момент, когда он читается как csv, код имеет тенденцию выдавать ошибку: Ошибка в runif (c1 $ X27.Jun_new [i], min = c1 $ LB [i ], max = c1 $ UB [i]): Недопустимые аргументы – user6016731

+0

@ user6016731 ​​вам нужно правильно загружать данные из файла 'csv' в фрейм данных или таблицу данных. Ничего не упоминается, что этот код будет работать для всех типов данных, всех типов объектов и т. Д.! – 989

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