Как я могу создать вектор, используя только для l oop? (вектор указан в теле) - PullRequest
1 голос
/ 11 февраля 2020

(1,2,2,3,3,3,4,4,4,4, ..., n, ..., n)

Я хочу сделать приведенный выше вектор для l oop, но без использования функции повторения или других функций. Это может быть не очень хороший вопрос в stackoverflow, но так как я новичок ie для R, я осмелюсь попросить здесь помочь.

(можно предположить, что длина вектора равна 10)

Ответы [ 4 ]

4 голосов
/ 11 февраля 2020

С for l oop это можно сделать с

n <- 10
out <- c()
for(i in seq_len(n)){
      for(j in seq_len(i)) {                   
         out <- c(out, i)
           }                  

}

В R, в противном случае это можно сделать как

rep(seq_len(n), seq_len(n))
1 голос
/ 11 февраля 2020

Я был избит @akrun за секунды, поэтому я хотел бы дать вам несколько подсказок , если бы можно было использовать rep , что может помочь вам с R в целом. (Без использования rep, просто посмотрите на @akrun)

Краткий ответ с использованием rep

rep(1:n, 1:n)

Длинный ответ с использованием rep

Перед публикацией вопроса вы должны попытаться разработать свои собственные решения и поделиться ими. Попытка немного погуглить и поделиться тем, что вы уже нашли, обычно тоже хороша. Пожалуйста, взгляните на «Помощь / Как спросить»

Давайте попробуем сделать это вместе. Прежде всего, мы должны попытаться взглянуть на официальные источники:

Из двух предыдущих (и других источников) вы найдете две интересные функции:

  • : оператор: it может использоваться для генерации последовательности целых чисел от a до b, например a:b. Например, при наборе 1:3 вы получите 1, 2, 3 vector
  • rep(x, t) - это функция, которую можно использовать для копирования элемента (ов) x t раз.

Вам также нужно знать, что R "векторно-ориентирован", то есть он применяет функции к векторам без ввода циклов explicits. Например, если вы вызываете repl(1:3, 2), это (почти) эквивалентно выполнению:

for(i in 1:3)
    rep(i, 2)

Комбинируя предыдущие две функции и понятие R «векторно-ориентированное», вы получаете rep(1:n, 1:n) решение.

0 голосов
/ 11 февраля 2020

Вы можете сделать это с одним l oop, хотя это while, а не for

n <- 10
x <- 1; 
i <- 2; 

while(i <= n) 
{
 x <- c(x, 1/i); 
 if(sum(x) %% 1 == 0) i = i + 1; 
}

1/x
0 голосов
/ 11 февраля 2020

Я не уверен, почему вы не хотите использовать rep, но вот способ не использовать его или любые функции, подобные rep в пределах l oop.

`for (i in 1:10){
  a<-NA
  a[1:i] <- i
  if (i==1){b<-a}
  else if (i >1){b <- c(b,a)}
  assign("OutputVector",b,envir = .GlobalEnv)
  }`
`OutputVector`

Достижение n из десяти казалось субъективным, поэтому я просто сделал l oop для чисел от 1 до 10, и вы можете взять первые 10 чисел в векторе, если хотите. OutputVector[1:10]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...