スカラー・ベクトル・アレイとループ

  • スカラー・)ベクトル・アレイは要素数が確定しているので、ループを回して網羅することができます
  • ベクトルの場合
v<-1:5
# 要素数
L<-length(v)
print(L)
v2<-rep(0,L)
print(v2)
for(i in 1:L){
 v2[i]<-v[i]^2
 print(paste("i is ", i))
 print(v2)
}
print(v2)
> v<-1:5
> # 要素数
> L<-length(v)
> print(L)
[1] 5
> v2<-rep(0,L)
> print(v2)
[1] 0 0 0 0 0
> for(i in 1:L){
+  v2[i]<-v[i]^2
+  print(paste("i is ", i))
+  print(v2)
+ }
[1] "i is  1"
[1] 1 0 0 0 0
[1] "i is  2"
[1] 1 4 0 0 0
[1] "i is  3"
[1] 1 4 9 0 0
[1] "i is  4"
[1]  1  4  9 16  0
[1] "i is  5"
[1]  1  4  9 16 25
> print(v2)
[1]  1  4  9 16 25
  • 行列
m<-matrix(1:6,2,3)
print(m)
L<-dim(m)
print(L)
m2<-matrix(0,nrow=L[1],ncol=L[2])
print(m2)
for(i in 1:L[1]){
 for(j in 1:L[2]){
  m2[i,j]<-m[i,j]+1
  print(m2)
 }
}
m2-m
> m<-matrix(1:6,2,3)
> print(m)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> L<-dim(m)
> print(L)
[1] 2 3
> m2<-matrix(0,nrow=L[1],ncol=L[2])
> print(m2)
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0
> for(i in 1:L[1]){
+  for(j in 1:L[2]){
+   m2[i,j]<-m[i,j]+1
+   print(m2)
+  }
+ }
     [,1] [,2] [,3]
[1,]    2    0    0
[2,]    0    0    0
     [,1] [,2] [,3]
[1,]    2    4    0
[2,]    0    0    0
     [,1] [,2] [,3]
[1,]    2    4    6
[2,]    0    0    0
     [,1] [,2] [,3]
[1,]    2    4    6
[2,]    3    0    0
     [,1] [,2] [,3]
[1,]    2    4    6
[2,]    3    5    0
     [,1] [,2] [,3]
[1,]    2    4    6
[2,]    3    5    7
> m2-m
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    1    1
  • アレイ
# dimension
d<-c(2,3,4)
# cell 数
Nc<-prod(d)
print(Nc)
a<-array(1:Nc,d)
print(a)
# 軸ごとに、1,2,...,と言うベクトルを作って、それをリストに格納する
x<-list()
for(i in 1:length(d)){
 # リストを作るときは[[ ]] を使う
 x[[i]]<-1:d[i]
}
print(x)
X<-expand.grid(x)
# 行数=セル数、列数=軸数、の行列ができる
dim(X)
prod(d)
length(d)
# Xはアレイの全セルの番地の行列
print(X)
# 全番地行列でループする
# Xの行数 nrow(X)
for(i in 1:length(X[,1])){
 # arrayはベクトルに番地が振ってあるものなので
 # array a のベクトル的番地(Xの行番号)で値が取り出せる
 print(a[i])
}
> # 全番地行列でループする
> # Xの行数 nrow(X)
> for(i in 1:length(X[,1])){
+  # arrayはベクトルに番地が振ってあるものなので
+  # array a のベクトル的番地(Xの行番号)で値が取り出せる
+  print(a[i])
+ }
[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
[1] 16
[1] 17
[1] 18
[1] 19
[1] 20
[1] 21
[1] 22
[1] 23
[1] 24