### R のデータタイプ x <-1.5 # 数値(倍精度実数) x (x <- 1) # 付値と結果の表示を同時に行う (xx = 2) # 付値のもうひとつの形式 (x <- "abc") # 文字列 str(1L) # 明示的に整数と指定 str(1) # 単に1とすると実数とされる (x <- 1+2i) # 虚数 1 == 1 # 論理値TRUE 1 == 0 # 論理値FALSE 1/0 # 正負の無限大 -1/0 log(-1) # 非数NaN x <- NULL # 何もないことを表す記号 NULL str(x) ### ベクトル x <- c(1,2,3) #数値ベクトル str(x) # オブジェクト x の構造 length(x) # ベクトルの長さ y <- c("1","2","3") # 文字列ベクトル str(y) length(y) # ベクトルの長さ c(c(1,2,3),c(4,5,6,7)) # ベクトルの連結 ### ベクトルの演算(ベクトル化演算) x <- c(1,2,3) x + 0.1 2*x x+x #要素毎の和 x*x #要素毎の積 x^3 #要素ごとのべき sqrt(x) x^(1/2) 1/x log(x) sin(x) c(1,2)*x # リサイクル規則の例.長さが足りないときは繰り返し適用される. ### ベクトルの作り方 1:3 # 等差数列 (-1):3 1:2.5 seq(3) # 等差数列 seq(2,5) seq(1,3,by=0.3) ### 組み込み文字列ベクトル letters LETTERS month.abb month.name ### ベクトルの添字操作 x <- 1:5 x[2] x[c(2,4)] x[c(2,4)] <- c(7,8) x x[-c(2,4)] x == 3 x[c(FALSE,FALSE,TRUE,FALSE,FALSE)] # TRUEの要素だけが取り出される x[x == 3] which(x == 3) x[which(x == 3)] ### 行列 (x <- matrix(1:12,nrow=4,ncol=3)) # 行数と列数を指定 (x <- matrix(1:12,nrow=3,ncol=4)) (x <- matrix(1:12,nrow=3,ncol=4,byrow=TRUE)) # 列主導で並べる (x <- matrix(1:12,nr=3,nc=4,b=TRUE)) # 引数名の省略 matrix(letters[1:9],nrow=3,ncol=3) # 文字列行列 ### 行列の添字操作 x <- matrix(1:12,nrow=4,ncol=3) x[2,3] # (2,3)要素 x[,3] # 第3列 x[2,] # 第2行 (x[2,] <- runif(3)) # 行成分の上書き dim(x) # 行列xの次元属性 dim(x) <- c(3,4) # 行列xの次元属性を変更 x x[1:2,3] # 範囲指定で要素を取り出し x[1:2,1:3] # 部分行列 x == 3 # 論理値行列 which(x == 3) as.vector(x) # 行列のベクトル化 x[3] # 行列をベクトルと考えた時の要素取り出し dim(x) <- NULL # 次元属性をなくすとベクトルになる x ### 行列に対する演算 (x <- matrix(1:8,ncol=4,nrow=2)) (y <- matrix(runif(8),ncol=4,nrow=2)) dim(x) dim(y) t(x) # 行列の転値 x %*% t(y) # 行列積 2*x+1 x+y # 成分毎の和 x*y # 成分毎の積 x/y # 成分毎の商 x <- matrix(rnorm(9),nc=3,nr=3) det(x) # 行列式 solve(x,diag(3)) # 逆行列 solve(x) # これでもOK x%*%solve(x) # ほぼ単位行列 diag(3) # 単位行列 diag(c(1,2,3)) # 対角行列 diag(x) # 対角成分 lower.tri(x) # 下三角部分 x*lower.tri(x) lower.tri(x,diag=TRUE) # 対角分を含む下三角部分 x*lower.tri(x,diag=TRUE) sin(x) # 行列に対するベクトル化演算 rowSums(x) # 行和 colSums(x) # 列和 ### 行列の分解 x <- matrix(runif(3*3),ncol=3,nrow=3) (res <- eigen(x)) # 固有値分解 (x%*%res$vectors) - (res$vectors%*%diag(res$values)) # 確かに固有値固有ベクトル分解 x <- matrix(runif(2*3),ncol=3,nrow=2) (res <- svd(x)) # 特異値分解 res$u %*% t(res$u) # uとvの正規直交性 t(res$v) %*% res$v # uとvの正規直交性 x - (res$u %*% diag(res$d) %*% t(res$v)) # 確かに特異値分解 (x=U*D*V^T) ### データフレーム ### データフレームとは異なる型のベクトルをまとめて一つの変数として扱える配列 ### 見た目は行列と同じ.異なる型を各列に入れられる点が違う. (x <- data.frame(a=1:4,b=runif(4),c=month.abb[1:4])) # 数値・数値・文字 str(x) (xx <- data.frame(a=1:4,b=runif(4),c=month.abb[1:5])) #各列のサイズは同じでなくてはいけない ### データフレームの添字操作 x[[1]] # 第一変数を取り出し x$a # 第一変数を変数名で取り出し x$a[2:3] x[1,3] x[,3] x[3,] # 第3ケースを取り出す x[x$c=='Apr',] # 第3変数が'Apr'の行を抽出 x[x$c!='Apr',] # 第3変数が'Apr'以外の行を抽出 x[x$c=='Apr'|x$c=='Jan',] # 第三ケースが'Apr'または'Jan'の行を抽出 ### 組み込みデータフレーム cars str(cars) cars$speed cars$dist cars[2,] (y <- x[1:2,1:2]) # サブデータフレーム str(y) x[1:2,] x[,c(1,3)] attach(x) # データフレームの各変数を展開 a # 変数名でアクセスできる ### ファイルからの読み込み ( x <- read.table("whtable.txt") ) str(x) x[[1]] x[[2]] x[[3]] ### リスト ### ベクトルを集めたもの.各列の要素数がバラバラでも良い. (x <- list(a=1:3,b=rnorm(5),c=letters[1:6],d=c(sin,cos,log,exp))) str(x) x[[1]] x$a x[[4]] # 第4成分は4つの関数 x[[4]][[1]](pi/2) # sin(pi/2)ということ