サーチ…
変数、データ構造、基本操作
Rでは、名前付きデータ構造を使用してデータオブジェクトが操作されます。オブジェクトの名前は「変数」と呼ばれることがありますが、その用語は公式のRドキュメントでは特定の意味を持ちません。 Rの名前は大文字と小文字を区別し 、英数字( az
、 Az
、 0-9
)、ドット/ピリオド( .
)、アンダースコア( _
)を含むことがあります。データ構造の名前を作成するには、次の規則に従わなければなりません。
数字やアンダースコア(例えば
1a
)、または有効な数値式(.11
)またはダッシュ( ' - ')やスペースで`1a`
は、引用符で囲んだときにのみ使用できます。と`.11`
。名前はバックティックで印刷されます:list( '.11' ="a") #$`.11` #[1] "a"
英数字、ドット、アンダースコアの他のすべての組み合わせは自由に使用できます。バックティックの有無による参照は同じオブジェクトを指します。
名前はで始まる
.
システム名とみなされ、ls()
関数を使用して常に表示されるわけではありません。
変数名の文字数に制限はありません。
有効なオブジェクト名の例をいくつか挙げます: foobar
、 foo.bar
、 foo_bar
、 .foobar
Rでは、変数には、中置代入演算子<-
を使用して値が割り当てられます。演算子=
は変数に値を代入するためにも使用できますが、関数呼び出しの中でパラメータ名と値を関連付けるのが適切です。オペレータの周囲のスペースを省略すると、ユーザに混乱が生じる可能性があることに注意してください。式a<-1
は、論理比較( a < -1
)ではなくa <- 1
代入( a <- 1
)として解析されます。
> foo <- 42
> fooEquals = 43
したがって、 foo
は42
の値が割り当てられます。コンソール内でfoo
と入力すると42
が出力され、 fooEquals
と入力すると43
が出力されます。
> foo
[1] 42
> fooEquals
[1] 43
次のコマンドは、 x
という名前の変数に値を割り当て、同時に値を出力します。
> (x <- 5)
[1] 5
# actually two function calls: first one to `<-`; second one to the `()`-function
> is.function(`(`)
[1] TRUE # Often used in R help page examples for its side-effect of printing.
->
を使って変数に代入することもできます。
> 5 -> x
> x
[1] 5
>
データ構造のタイプ
Rにスカラーデータ型はありません。長さ1のベクトルはスカラーのように振る舞います。
- ベクトル:原子ベクトルは、同じクラスのオブジェクトのシーケンスでなければなりません。数字のシーケンス、論理のシーケンス、文字のシーケンス。
v <- c(2, 3, 7, 10)
v2 <- c("a", "b", "c")
は両方ともベクトルです。 - 行列:数値、論理または文字の行列。
a <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow = 4, ncol = 3, byrow = F)
。ベクトルと同様に、行列は同じクラスの要素で作られていなければなりません。行列から要素を抽出するには行と列を指定する必要がありますa[1,2]
は、第1行第2列の要素である[1] 5
を返します。 - リスト:異なる要素の連結
mylist <- list (course = 'stat', date = '04/07/2009', num_isc = 7, num_cons = 6, num_mat = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), results = c(30, 19, 29, NA, 25, 26 ,27) )
。リストから要素を抽出するには、名前(リストの名前が付いている場合)またはインデックスで要素を抽出します。与えられた例では、mylist$results
とmylist[[6]]
は同じ要素を取得します。警告:mylist[6]
を試しても、Rはエラーを出すことはありませんが、結果をリストとして抽出します。mylist[[6]][2]
は許可されていますが(19が与えられます)、mylist[6][2]
はエラーをmylist[6][2]
ます。 - data.frame:同じ長さのベクトルであるが、(おそらく)異なるタイプのベクトルを持つオブジェクト。それらは行列ではありません。
exam <- data.frame(matr = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), res_S = c(30, 19, 29, NA, 25, 26, 27), res_O = c(3, 3, 1, NA, 3, 2, NA), res_TOT = c(30,22,30,NA,28,28,27))
。列は、名前exam$matr
、exam[, 'matr']
またはインデックスexam[1]
、exam[,1]
で読み取ることができます。行は、名前exam['rowname', ]
またはインデックスexam[1,]
でも読み取ることができます。データフレームは実際には特定の構造(rownames-attributeと等しい長さの要素)を持つ単なるリストです。
一般的な操作といくつかの注意深いアドバイス
デフォルトの操作は要素ごとに行われます。オペレータの優先順位の規則の?Syntax
を参照してください。ほとんどの演算子(および基底Rの他の関数も)は、不等長の引数を許可するリサイクル規則を持っています。これらのオブジェクトが与えられた場合:
オブジェクトの例
> a <- 1
> b <- 2
> c <- c(2,3,4)
> d <- c(10,10,10)
> e <- c(1,2,3,4)
> f <- 1:6
> W <- cbind(1:4,5:8,9:12)
> Z <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1))
いくつかのベクトル操作
> a+b # scalar + scalar
[1] 3
> c+d # vector + vector
[1] 12 13 14
> a*b # scalar * scalar
[1] 2
> c*d # vector * vector (componentwise!)
[1] 20 30 40
> c+a # vector + scalar
[1] 3 4 5
> c^2 #
[1] 4 9 16
> exp(c)
[1] 7.389056 20.085537 54.598150
いくつかのベクトル操作の警告!
> c+e # warning but.. no errors, since recycling is assumed to be desired.
[1] 3 5 7 6
Warning message:
In c + e : longer object length is not a multiple of shorter object length
Rはそれができるものを合計し、短いベクトルを再利用して空白を埋める...警告は、2つのベクトルの長さが正確には倍数ではないためにのみ与えられます。 c + f#何の警告もありません。
一部のマトリックス操作警告!
> Z+W # matrix + matrix #(componentwise)
> Z*W # matrix* matrix#(Standard product is always componentwise)
行列乗算を使用するには:V%*%W
> W + a # matrix+ scalar is still componentwise
[,1] [,2] [,3]
[1,] 2 6 10
[2,] 3 7 11
[3,] 4 8 12
[4,] 5 9 13
> W + c # matrix + vector... : no warnings and R does the operation in a column-wise manner
[,1] [,2] [,3]
[1,] 3 8 13
[2,] 5 10 12
[3,] 7 9 14
[4,] 6 11 16
"プライベート"変数
R内の変数または関数の名前の先頭のドットは、変数または関数が隠されることを示すためによく使用されます。
したがって、以下の変数を宣言してください
> foo <- 'foo'
> .foo <- 'bar'
そしてls
関数を使ってオブジェクトをリストすると、最初のオブジェクトだけが表示されます。
> ls()
[1] "foo"
しかし、関数にall.names = TRUE
を渡すと、 'private'変数が表示されます
> ls(all.names = TRUE)
[1] ".foo" "foo"