2016-01-05 3 views
3

У меня есть два вектора, которые я хотел бы ссылаться в цикле for, но каждый имеет разную длину.2 переменные в цикле for в R

n=1:50 
m=letters[1:14] 

Я попробовал один цикл, чтобы прочитать его

for (i in c(11:22,24,25)){ 
    cat (paste(n[i],m[i],sep='\t'),sep='\n') 
} 

и в конечном итоге с:

11 k 
12 l 
13 m 
14 n 
15 NA 
16 NA 
17 NA 
18 NA 
19 NA 
20 NA 
21 NA 
22 NA 
24 NA 
25 NA 

, но я хотел бы получить:

11 a 
12 b 
13 c 
... 
25 n 

есть способ иметь объявление двойной переменной?

for (i in c(11:22,24,25) and j in 1:14){ 
    cat (paste(n[i],m[j],sep='\t'),sep='\n') 
} 

или что-то подобное, чтобы получить результат, который я хочу?

+8

вы надеваете» t нужен цикл 'for'. 'paste (n [c (11:22, 24:25)], m [1:14])' – akrun

ответ

4

Нет, нет. Но вы можете сделать это:

ind_j <- c(11:22,24,25) 
ind_k <- 1:14 
for (i in seq_along(ind_j)){ 
    cat (paste(n[ind_j[i]],m[ind_k[i]],sep='\t'),sep='\n') 
} 

Конечно, это очень вероятно, что вы не должны использовать for петлю для вашей конкретной задачи.

+0

- отличное решение, и оно прекрасно вписывается! – alex

0

Если вы хотите m, чтобы начать все сначала, когда он дошел до конца, вы можете воспользоваться утилизации в R.

cat(paste(n, m, sep='\t', collapse='\n'), '\n') 

Когда конец m достигнут, он будет начинать все сначала, пока все элементы n были повторены. Если вам нужно это в цикле, замените cat на цикл for.

0

Ваша проблема заключается в присвоении значений i в for (i in c(11:22,24,25) - это присваивает значения 11,12,13,14,15 .... i. , тогда вы хотите получить значения m [i]. , но помните: m [i] имеет только 1..14 пунктов, поэтому для пункта 15 и выше вы получите NA

Возможно, это то, что вы хотели - здесь есть более надежные ответы, и @ Roland намного лучше но имхо - это устранит проблему, не изменяя ваш первоначальный подход

for (i in c(1:12,14,15)){cat (paste(n[i],m[i],sep='\t'),sep='\n')} 

если вы просто вычесть 10 из вашей последовательности - проблема индексации будет уходить и u'll получить

1 a 
2 b 
3 c 
4 d 
5 e 
6 f 
7 g 
8 h 
9 i 
10 j 
11 k 
12 l 
14 n 
15 o