Страница 1 из 1

... и снова циклы

Добавлено: 28 мар 2013, 18:58
ymr3R9Jge
Задача в следующем: смоделировать N-ое количество рядов данных (векторов), состоящих из комбинаций с разными законами распределения, а затем объединить их в один вектор. Выход вижу в использовании цикла, но застопорился на создании множества уникальных векторов, а не на стократном перезаписывании одного вектора. Мой цикл выглядит следующем образом:

Код: Выделить всё

for (m in 1:100)
{
tmp<- c(rgamma(3,2.5,0.5), rnorm(10,1,0.1), rgamma(2,2,0.5))
...а вот как заставить сделать R множество векторов вида x_vektor_m, где m - номер итерации в цикле?
Далее, если мы получим множество векторов вида x_vektor_1, x_vektor_2, x_vektor_3 и т.д. как соединить их последовательно в единый вектор? Предполагаю, что команды должны как-то быть связаны с names, но гугление ничего не показало... :oops:

Re: ... и снова циклы

Добавлено: 28 мар 2013, 20:22
Иван Стрельников
Ели нужен собственно результирующий вектор, то как-то так

Код: Выделить всё

tmp<-NULL
	for (i in c(1:1000)){
		tmp<-c(tmp,c(rgamma(3,2.5,0.5), rnorm(10,1,0.1), rgamma(2,2,0.5)))
	}
Если нужно получить еще и 1000 исходных векторов, то можно попробовать сделать вектор имен через цикл с использованием функции paste(). Потом, что бы представить имена, как объекты подойдет get(), но это неэффективно.

Re: ... и снова циклы

Добавлено: 28 мар 2013, 20:28
gamm
ymr3R9Jge писал(а):...а вот как заставить сделать R множество векторов вида x_vektor_m, где m - номер итерации в цикле?
Далее, если мы получим множество векторов вида x_vektor_1, x_vektor_2, x_vektor_3 и т.д. как соединить их последовательно в единый вектор? Предполагаю, что команды должны как-то быть связаны с names, но гугление ничего не показало... :oops:
не очень понял, в чем задача. Чего понял, написал ниже

Код: Выделить всё

set.seed(123)
pos<-rep(c(rep(1,3),rep(2,10),rep(3,2)),10)
num<-length(pos)
tmp1<-rgamma(num,2.5,0.5)
tmp2<-rnorm (num,1,0.1)
tmp3<-rgamma(num,2,0.5)
tmp <- (pos==1)*tmp1 + (pos==2)*tmp2 + (pos==3)*tmp3
cbind(tmp,tmp1,tmp2,tmp3)[1:30,]
tmp.df<-as.data.frame(matrix(tmp,ncol=10))
tmp.names<-paste(rep("x_vektor_",10),1:10,sep="")
names(tmp.df)<-tmp.names
head(tmp.df)
если нужно создать именно переменные, то в цикле делаем что-то типа

Код: Выделить всё

for(m in 1:10) {
  tmp.form<-sprintf("x_vektor_%d <-tmp.df[,%d]",m,m)
  tmp.expr<-parse(text=tmp.form)
  eval(tmp.expr)
}

Re: ... и снова циклы

Добавлено: 28 мар 2013, 23:09
ymr3R9Jge
Иван Стрельников, Вам огромное спасибо! Именно это мне и нужно - собрать воедино векторы, которые были созданы в полуручном режиме. Я догадывался, что это просто, но что так гениально... :D

Re: ... и снова циклы

Добавлено: 28 мар 2013, 23:42
Максим Дубинин
галка не там, на первый надо, иначе в общем списке тема не пометится как решенная