2012-09-19 72 views
12

當我遍歷一個向量向量時,每個循環的結果是幾個向量。我希望每個循環的結果都是一個向量。請看下面的例子:循環遍歷矢量向量

> foo <- seq(from=1, to=5, by=1) 
> bar <- seq(from=6, to=10, by=1) 
> baz <- seq(from=11, to=15, by=1) 
> vects <- c(foo,bar,baz) 
> for(v in vects) {print(v)} 
[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 
[1] 6 
[1] 7 
[1] 8 
[1] 9 
[1] 10 
[1] 11 
[1] 12 
[1] 13 
[1] 14 
[1] 15 

這很奇怪,因爲我期望給三個矢量它(應該)重複三次,給出的向量,C(FOO,酒吧,巴茲)。例如:

[1] 1 2 3 4 5 
[1] 6 7 8 9 10 
[1] 11 12 13 14 15 

任何人都可以解釋爲什麼我得到這個結果(15個向量),以及如何實現我要找的結果(3個向量)?

+1

在R中沒有向量的向量。函數'c'只是將您給它的三個向量連接成一個長向量。 – Seth

+3

@Seth,*是*有矢量矢量。列表是* R中的*通用向量,它可以包含向量。我們可以稱它們爲列表,但就R而言它是一個向量。 (與僅保存一種數據類型的原子矢量相比,列表是其元素可以容納任何數據類型的矢量。) –

+2

我想知道爲什麼這是downvoted?哪裏不對?問題清晰且可重複,幷包含預期產出。我不知道爲什麼這個Q值得讚揚,尤其是沒有評論的人爲什麼說呢?! –

回答

14

瞭解一下什麼是vects

> vects 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

c()連接(在這種情況下)這三個矢量,它們串聯成一個單一的載體。在for()循環中,v依次取得vects中的每個值並打印出來,因此可以看到結果。

你想要一個三個單獨的載體列表嗎?如果是這樣

> vects2 <- list(foo, bar, baz) 
> for(v in vects2) {print(v)} 
[1] 1 2 3 4 5 
[1] 6 7 8 9 10 
[1] 11 12 13 14 15 

換言之,形成向量的列表,而不是載體的組合。

+0

很好的解釋,謝謝。 – user1515534

2

替代vects <- list(foo,bar,baz)替代vects <- c(foo,bar,baz)

作爲矢量矢量沒有這樣的東西(真的)。

+0

我不同意最後一點;一個列表*是一個向量(它是一個通用向量)並且它可以包含向量(如您所示),所以... ;-) –

+0

@GavinSimpson嘆息。像往常一樣正確,加文國王! :)無論如何 – joran

+0

+1,尤其是對我來說稱王。我掌管! :) –