7

次の 3 つの方法のいずれかで、数列を作成できます。

> 1:4
[1] 1 2 3 4

> seq(1,4)
[1] 1 2 3 4

> c(1,2,3,4)
[1] 1 2 3 4

しかし、なぜc()別のクラスを返すのでしょうか?

> class(1:4)       
[1] "integer"

> class(seq(1,4))
[1] "integer"

> class(c(1,2,3,4))
[1] "numeric"

編集:seq()議論に追加されました。

4

1 に答える 1

13

の Value セクションはhelp(":")、コロン演算子が何を返すかを示します。それは言います:

from が整数値で、結果が R 整数型で表現できる場合、... は整数型になります。

したがって、from整数として表現できる場合、ベクトル全体が整数に強制されます

> class(1.0:3.1)
[1] "integer"
> 1.0:3.1
[1] 1 2 3

一般的に R では、1ですnumeric。が必要な場合integerは、追加する必要がありますL

> class(1)
[1] "numeric"
> class(1L)
[1] "integer"

さらに、cすべての引数を「戻り値の型である共通の型」に強制します (から?c)。どのタイプが「階層 NULL < raw < logical < integer < double < complex < character < list < expression 内のコンポーネントの最高のタイプから決定される」か。

したがって、 への引数cが よりも一般的である場合integer、ベクトル全体がより一般的なクラスに強制されます。

> class(c(1L, 2L, 3L, 4L))
[1] "integer"
> class(c(1L, 2, 3L, 4L)) # 2 is numeric, so the whole vector is coerced to numeric
[1] "numeric"
> class(c(1L, 2, "3L", 4L)) # "3L" is character, so the whole vector is coerced to character
[1] "character"

Re:seqケース、

seq(1, 4)1:4に記載されているものと同じです?seq

seq(from, to) 「from、from+/-1、...、to (from:to) と同じシーケンスを生成する」

于 2013-08-05T00:40:27.990 に答える