R中的条件语句
为了进行编程,我们需要能够控制程序执行的流程。
该控制基于某些逻辑条件进行。
当满足条件时,我们希望程序以某种方式运行,而当不满足条件时,我们将以另一种方式操纵程序。
与其他几种编程语言一样,这是通过R中的" if else"语句建立的。
R中的If语句
R支持条件语句的多种变体,例如独立if(如果与else一起),嵌套if和switch。
在本教程中,我们将一一探讨。
if块的基本结构如下。
if (condition) { #Code to execute if condition is met } #This code only works if the condition is true.
让我们用一个简单的例子来说明这一点。
if (a<=5) { print(a^2) }
上面的代码只是检查一个值是否小于或者等于5,并且如果条件保持良好,它将打印数字的平方值。
让我们以3的值执行它。
[1] 9
如果R中的其他语句
当您以6或者7的值运行此代码时,您将发现根本不会打印任何内容。
这是因为我们没有处理条件可能为假的情况。
这就是为什么使用" else"块的原因。
让我们现在尝试上面带有if块的代码段。
不要忘记在else关键字和左括号" {"之间添加空格。
if(a<=5){ print(a^2) } else { print(a*2) }
对于值5,上面的程序在if块中运行代码并给出输出25。
但是,当给a大于5的值(例如9)时,将a乘以else中指定的2块。
R中的Ifelse语句
R还具有一个特殊的名为" ifelse"的构造。
当您希望针对向量的每个元素评估条件时,ifelse构造具有很大的灵活性。
稍后我们将详细探讨R向量,但是现在,我们将简单定义一个6个数字的小向量,如下所示。
myvector=c(4,1,6,7,0,4)
现在,我们希望将100除以向量的每个元素并显示结果。
但是,我们知道被0除会产生错误,因此我们想在代码中处理它。
如果我们使用if编写简单的条件语句,则问题在于我们不知道向量中的哪个位置为零。
在这种情况下," ifelse"构造非常有用。
该划分可以如下实现。
division <- ifelse(test=myvector==0,yes=NA,no=100/myvector)
这段代码测试了myvector的特定元素是否为0的条件。
如果是,则结果将填充NA值。
否则进行划分。
现在让我们检查除法结果。
> division [1] 25.00000 100.00000 16.66667 14.28571 NA 25.00000
在R中嵌套if其他语句
R还支持在另一个块中嵌套if语句。
当我们希望检查彼此分层依赖的多个条件时,此构造会有所帮助。
我们要先检查是否小于10的数字,然后检查是否为偶数。
查看以下旨在实现此目的的代码。
if(a<10){ print("A is less than 10") if(a%%2==0){ print("A is even") } else { print("A is odd") } }
当为a提供值4时,将产生以下结果。
[1] "A is less than 10" [1] "A is even"
多个if else块
我们还可以按照以下方式堆叠" if-else"块来处理复杂的逻辑场景。
if(a<5){ print("Grade is C") }else if(a>=5&a<10){ print("Grade is B") }else if(a>=10&a<20){ print("Grade is A") }else { print("Invalid marks") }
R中的Switch语句
最后,我们有一个特殊的条件语句,叫做switch
。
如果我们需要产生特定于单个变量的输出,则将证明switch是有用的。
没有switch
,我们需要编写一个复杂的if块堆栈。
考虑一个示例,在该示例中,我们需要基于数据集中的"收藏夹"列填写代码。
板球获得CR,足球获得FB,曲棍球获得HK,羽毛球获得BD,网球获得TN。
这可以通过下面的switch语句轻松地处理。
code = switch(EXPR=fx,Cricket='CR',Football='FB',Hockey='HK',Badminton='BD',Tennis='TN')
让我们将fs设置为" Cricket",看看将为我们显示什么代码。
fs <- 'Cricket' code = switch(EXPR=fx,Cricket='CR',Football='FB',Hockey='HK',Badminton='BD',Tennis='TN',NA) code
[1] "CR"
看一下switch语句如何轻松地将给定值转换为相应的代码。
这里的EXPR代表我们希望切换的变量。
同样,在切换块中作为最终选项给出的NA用于处理无效输入。