開頭
在書寫條件迴圈結構時常常有幾個經常使用的函式和需要注意的小細節,在之後的學習中會慢慢補足。
有關邏輯運算子
if-else語句
if語句的格式為
if
(條件)
else
ifelse語句
一條if語句只能檢查乙個邏輯值條件,當我們輸入的條件中有多個邏輯值,if語句就只檢查第乙個元素,並報錯。所以此時使用ifelse
函式。
ifelse語句格式為
ifelse (條件,滿足時進行的步驟,不滿足時進行的步驟}
這裡給予乙個例子,檢查x/y的結果,對所有inf,即分母為0的情況,用na替代。即檢查y是否為0,若是,則用na替換,若不是,則輸出x/y的結果。
> x<-
5> y<--5
:5> ifelse(y==0,
na,x/y)[1
]-1.000000
-1.250000
-1.666667
-2.500000
-5.000000na[
7]5.000000
2.500000
1.666667
1.250000
1.000000
巢狀與堆疊語句
巢狀與堆疊語句即在乙個if語句中新增另乙個if語句
框架如下:
if--
|if-else|-
-else--
|if-else
|
或在if語句中新增多個else if語句
框架如下:
if--
|else-if
|--|
elseif|
--else
轉換函式
轉化函式可以將多個物件轉變為不同的數值,可以使用多個if函式實現。而在r中也可以使用switch語句。下面是乙個例子
> a<-
'a'>
> foo<-switch (a,
+ a =
1,b=w,c=
3,na+)
> foo[1
]1
課後習題
>
#練習10.1
>
#a.建立如下兩個向量
>
#vec1<-c(2,1,1,3,2,1,0)
>
#vec2<-c(3,8,2,2,0,0,0)
>
#將上述兩個向量和大於3的元素對應相乘,反之則求兩個向量元素的和。
> vec1<-c(2,
1,1,
3,2,
1,0)
> vec2<-c(3,
8,2,
2,0,
0,0)
> a<-vec1+vec2
> s<-rep(
na,length(vec1)
)>
for(i in
1:length(vec1)
)else+}
>
#b.設定方形矩陣並檢查對角線的字串是否為以小寫字母g或大寫字母g開頭。如果是,用字串'here'重寫;否則,用乙個同樣維度的矩陣替換整個矩陣。
>
#bi.mymati<-matrix(as.character(1:16),4,4)
>
#bii.mymat<-matrix(c('dandelion','hyacinthus','gerbera','marigold','geranium','ligularia','pachysandra','snapdragon','gladiolus'),3,3)
>
#biii.mymat<-matrix(c('great','exercises','right','here'),2,2,byrow=t)
> mymat<-matrix(c(
'great'
,'exercises'
,'right'
,'here'),
2,2,byrow=t)
> mymati<-matrix(as.character(1:
16),4
,4)> i<-c(1:
2)#注意如果在這裡使用for迴圈,for (i in 1:2),輸出結果則不同了
>
if(substr(diag(mymat)
[i],1,
1)=='g'
|| substr(diag(mymat)
[i],1,
1)=='g'
)else
> mymat
[,1][,2
][1,
]"here"
"exercises"[2
,]"right"
"here"
R 條件與迴圈
迴圈語句 使用形式 if 條件 如果條件成立,大括號內的語句就被執行 使用形式 if 條件 else 注意 else必須緊跟在 後面,不能另起一行,否則報錯 還可以組合起來用 if.else if.else.語句 if 條件1 else if 條件2 else if 條件3 else switch語...
R 條件與迴圈
迴圈語句 使用形式 if 條件 如果條件成立,大括號內的語句就被執行 使用形式 if 條件 else 注意 else必須緊跟在 後面,不能另起一行,否則報錯 還可以組合起來用 if.else if.else.語句 if 條件1 else if 條件2 else if 條件3 else switch語...
R語言 迴圈與條件
迴圈 for n in x expr r中最基本的是for迴圈,其中n為迴圈變數,x通常是乙個序列。n在每次迴圈時從x中順序取值,代入到後面的expr語句中進行運算。下面的例子即是以for迴圈計算30個fibonacci數。x c 1,1 for i in 3 30 例子1pv c 1,1,2,3,...