Извлечение векторов из вложенных циклов в R как векторов - PullRequest
0 голосов
/ 12 апреля 2020

Я учусь использовать R и пытаюсь извлечь переменные cont, p0 и pf из вложенного l oop как 3 различных вектора из этого кода.

v<-c("a","b","c","d","e","f","g","h")
n<-length(v)
mv<-5
a<-n-(mv-1)
cont<-0
for (num in (a-1):0){
  for (i in 0:num){
    cont<-cont+1
    p0<-v[a-num]
    pf<-v[n-i]
  }
}

Ожидаемый результат должен быть:

> print(cont)
[1] 1 2 3 4 5 6 7 8 9 10
> print (p0)
[1] "a" "a" "a" "a" "b" "b" "b" "c" "c" "d"
> print (pf)
[1] "h" "g" "f" "e" "h" "g" "f" "h" "g" "h"

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Я бы оставил cont в качестве индексной переменной и сохранил бы другие переменные в векторах.

v<-c("a","b","c","d","e","f","g","h")
n<-length(v)
mv<-5
a<-n-(mv-1)
cont = 0
cont_stored = vector();
p0 = vector();
pf = vector();

for (num in (a-1):0){
  for (i in 0:num){
    cont <- cont+1
    cat("cont = ", cont, "\n"); ## useful function for printing stuff out in loops
    cont_stored[cont] = cont;
    p0[cont] = v[a-num]
    pf[cont] = v[n-i]
  }
}
cont_stored
p0
pf
1 голос
/ 12 апреля 2020

Вы можете сделать это без явного for l oop:

v <- c("a","b","c","d","e","f","g","h")
n <- length(v)
mv <- 5
a <- n-(mv-1)
cont <- 0

p0 <- rep(v[1:a], a:1)
pf <- v[unlist(sapply((n-a + 1):n, function(x) n:x))]

p0
# [1] "a" "a" "a" "a" "b" "b" "b" "c" "c" "d"
pf
# [1] "h" "g" "f" "e" "h" "g" "f" "h" "g" "h"

Если вам нужно cont, вы можете использовать p0 или pf с seq_along.

cont <- seq_along(p0)
cont
#[1]  1  2  3  4  5  6  7  8  9 10
...