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

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 14
Откуда: Кривий Ріг

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

Сообщение ymr3R9Jge » 28 мар 2013, 18:58

Задача в следующем: смоделировать 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:
Последний раз редактировалось ymr3R9Jge 28 мар 2013, 23:50, всего редактировалось 1 раз.

Иван Стрельников
Интересующийся
Сообщения: 40
Зарегистрирован: 11 авг 2011, 13:23
Репутация: 15

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(), но это неэффективно.

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 28 мар 2013, 20:28

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)
}

ymr3R9Jge
Активный участник
Сообщения: 117
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 14
Откуда: Кривий Ріг

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

Сообщение ymr3R9Jge » 28 мар 2013, 23:09

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

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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

Сообщение Максим Дубинин » 28 мар 2013, 23:42

галка не там, на первый надо, иначе в общем списке тема не пометится как решенная
пристегивайтесь, турбулентность прямо по курсу

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 31 гость