我想在for循环中引用两个向量,但每个向量的长度都不同。
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')
}
或类似的东西得到我想要的结果?
答案 0 :(得分: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
循环来解决实际问题。
答案 1 :(得分:0)
如果您希望m
在结束时重新开始,您可以利用R中的回收。
cat(paste(n, m, sep='\t', collapse='\n'), '\n')
当达到m
的结尾时,它将重新开始直到n
的所有元素都被迭代完毕。如果您需要循环,请将cat
替换为for循环。
答案 2 :(得分:0)
你的问题在于在for (i in c(11:22,24,25)
中为i分配值 - 这会将值11,12,13,14,15 ....分配给i。
那么你想得到m [i]的值。
但要记住:m [i]只有1..14项,所以对于项目15及以上 - 你会得到NAs
也许这就是你想要的 - 这里有更强大的答案和@Roland的更好但是imho - 这可以解决你的问题,而无需改变你的初始方法
for (i in c(1:12,14,15)){cat (paste(n[i],m[i],sep='\t'),sep='\n')}
如果你只是从序列中减去10 - 索引问题就会消失,你会得到
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