> x=c(1,2,3,4,5)
> x1=list(n1=1,n2=2,n3=x)
> is.vector(x1)
[1] TRUE
> is.list(x1)
[1] TRUE
is.vector(x1)= trueなのはなぜですか?理解できません。
> x=c(1,2,3,4,5)
> x1=list(n1=1,n2=2,n3=x)
> is.vector(x1)
[1] TRUE
> is.list(x1)
[1] TRUE
is.vector(x1)= trueなのはなぜですか?理解できません。
から?is.vector
mode = "any"の場合、is.vectorはアトミックモード、リスト、および式に対してTRUEを返す場合があります。
に戻りmode
たくない場合は、を指定できます。is.vector
TRUE
list
> is.vector(x1, mode='numeric')
[1] FALSE
> is.vector(x, mode='numeric')
[1] TRUE
> is.atomic(x1)
[1] FALSE
R言語の定義から、リストは一般的なベクトルですが、アトミックベクトルではありません。
Rのベクトルは、順序付けられたもののコレクションです。この場合のものは
> mode(x1)
[1] "list"
ヘルプファイルから
xが名前以外の属性を持たない指定されたモードのベクトルである場合、is.vectorはTRUEを返します。
> attributes(x1)
$names
[1] "n1" "n2" "n3"
x1に別の属性を与える場合:
levels(x1)<-1:3
> x1
$n1
[1] 1
$n2
[1] 2
$n3
[1] 1 2 3 4 5
attr(,"levels")
[1] 1 2 3
> is.list(x1)
[1] TRUE
> is.vector(x1)
[1] FALSE
それはまだリストですが、今はベクトルではありません
Sの簡単な歴史から「Sの基本的なデータ構造は、数字、文字列、論理値などの類似要素のベクトルです。Sオブジェクトの属性の概念は、1988年のリリースまで明確に実装されていませんでしたが、最初のSは、データのプライマリベクトルには、データの特別なプロパティを表す他の値が付随していることが多いことを認識していました。たとえば、マトリックスは、データのベクトルと、次元(の数)を示すDimという名前の補助ベクトルです。同様に、時系列には、開始時刻、終了時刻、およびサイクルごとの観測数を示すTsp属性があります。これらの属性を持つベクトルは、ベクトル構造と呼ばれ、Sを他のほとんどのシステムと区別します。」
おそらく、Sの実装であるRでも同様であるため、これらのベクトル構造はベクトルとして指定されません。