这个人是好人 發表於 2022-3-4 10:25:23

R语言逻辑型运算的实现

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>一、逻辑型向量与比较运算</li><li>二、 逻辑运算</li><li>三、逻辑运算函数</li></ul></div><p class="maodian"></p><h2>一、逻辑型向量与比较运算</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>逻辑型</strong>是 R 的基本数据类型之一,只有两个值 TRUE 和 FALSE, 缺失时为 NA。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;逻辑值一般产生<strong>自比较</strong>,如</p>
<div class="jb51code"><pre class="brush:plain;">sele &lt;- (log10(15) &lt; 2); print(sele)</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="46" src="https://img.jbzj.com/file_images/article/202203/2022030410212867.png" width="668" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;向量比较结果为<strong>逻辑型向量</strong>。如</p>
<div class="jb51code"><pre class="brush:plain;">c(1, 3, 5) &gt; 2</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="43" src="https://img.jbzj.com/file_images/article/202203/2022030410212868.png" width="477" /></p>
<div class="jb51code"><pre class="brush:plain;">(1:4) &gt;= (4:1)</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="42" src="https://img.jbzj.com/file_images/article/202203/2022030410212869.png" width="535" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与 <strong>NA </strong><strong>比较</strong>产生 NA,如</p>
<div class="jb51code"><pre class="brush:plain;">c(1, NA, 3) &gt; 2</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="45" src="https://img.jbzj.com/file_images/article/202203/2022030410212870.png" width="430" /></p>
<div class="jb51code"><pre class="brush:plain;">NA == NA</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="45" src="https://img.jbzj.com/file_images/article/202203/2022030410212871.png" width="559" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了<strong>判断向量</strong>每个元素是否 NA,用 <strong>is.na()</strong> 函数,如</p>
<div class="jb51code"><pre class="brush:plain;">is.na(c(1, NA, 3) &gt; 2)</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="45" src="https://img.jbzj.com/file_images/article/202203/2022030410212872.png" width="587" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用 <strong>is.finite()</strong> 判断向量每个元素是否 <strong>Inf </strong><strong>值</strong>。</p>
<div class="jb51code"><pre class="brush:plain;">is.finite(c(1,Inf,8))</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="45" src="https://img.jbzj.com/file_images/article/202203/2022030410212873.png" width="616" /></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比较运算符</strong>包括 :&lt; &lt;= &gt; &gt;= == != %in%</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分别表示小于、小于等于、大于、大于等于、等于、不等于、属于。要注意等于 比较用了两个等号。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&nbsp;%in%</strong> 是比较<strong>特殊</strong>的比较, x %in% y 的运算把向量 y 看成集合,运算结果是一个逻辑型向量,第 i 个元素的值为 x 的第 i 元素是否属于 y 的逻辑型值。如</p>
<div class="jb51code"><pre class="brush:plain;">c(1,3) %in% c(2,3,4)</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="28" src="https://img.jbzj.com/file_images/article/202203/2022030410212874.png" width="539" /></p>
<div class="jb51code"><pre class="brush:plain;">c(NA,3) %in% c(2,3,4)
## FALSE TRUE
c(1,3) %in% c(NA, 3, 4)
## FALSE TRUE
c(NA,3) %in% c(NA, 3, 4)
## TRUE TRUE</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数 <strong>match(x, y) </strong> 起到和 <strong>x %in% y</strong> 运算类似的作用,但是其返回结果不是找到与否,而是对 x 的每个元素,找到其在 y 中首次出现的<strong>下标</strong>,<strong>找不到时取缺失值</strong>,如</p>
<div class="jb51code"><pre class="brush:plain;">match(c(1, 3), c(2,3,4,3))</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="30" src="https://img.jbzj.com/file_images/article/202203/2022030410212875.png" width="497" /></p>
<p class="maodian"></p><h2>二、 逻辑运算</h2>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 为了表达如 &ldquo; x &gt; 0 而且 x &lt; 1&rdquo;, &ldquo; x &le; 0 或者 x &ge; 1&rdquo; 之类的复合比较,需要使用逻辑运算把两个比较连接起来。逻辑运算符为 &amp; , | 和 ! , 分别表示 &ldquo; 同时成 立&rdquo; 、 &ldquo; 两者至少其一成立 &rdquo; 、 &ldquo; 条件的反面 &rdquo; 。比如,设 age&lt;=3 表示婴儿, sex==&#39; 女&#39; 表示女性,<br />&nbsp; &nbsp; &nbsp; &nbsp; 则 age&lt;=3 &amp; sex==&#39; 女 &#39; 表示女婴 ,<br />&nbsp; &nbsp; &nbsp; &nbsp; age&lt;=3 | sex==&#39; 女 &#39;表示婴儿或妇女,<br />&nbsp; &nbsp; &nbsp; &nbsp; !(age&lt;=3 | sex==&#39; 女 &#39;) 表示既非婴儿也非妇女。<br />为了确定运算的先后次序可以用圆括号 () 指定。<br />&nbsp; &nbsp; &nbsp; &nbsp; 用 xor(x, y) 表示 x 与 y 的异或运算,即值不相等时为真值,相等时为假值,有缺失值参加运算时为缺失值。<br />&nbsp; &nbsp; &nbsp; &nbsp; 逻辑向量与逻辑标量之间的逻辑运算,两个逻辑向量之间的逻辑运算规则遵从一般 R 向量间运算规则。<br />&nbsp; &nbsp; &nbsp; &nbsp; 在右运算符是缺失值时,如果左运算符能够确定结果真假,可以得到非缺失的结果。例如,TRUE | NA 为 TRUE , FALSE &amp; NA 为 FALSE 。<br />&nbsp; &nbsp; &nbsp; &nbsp; 不能确定结果时返回 NA,比如, TRUE &amp; NA 为 NA , FALSE | NA 为 NA 。<br />&nbsp; &nbsp; &nbsp; &nbsp; &amp;&amp; 和 || 分别为短路的标量逻辑与和短路的标量逻辑或,仅对两个标量进行运算,如果有向量也仅使用第一个元素。一般用在 if 语句、 while 语句中,且只要第一个比较已经决定最终结果就不计算第二个比较。例如</p>
<div class="jb51code"><pre class="brush:plain;">if(TRUE || sqrt(-1)&gt;0) next</pre></div>
<p>由于其中的 sqrt(-1) 部分不会执行,结果返回:</p>
<p style="text-align:center"><img alt="" height="31" src="https://img.jbzj.com/file_images/article/202203/2022030410212876.png" width="615" /></p>
<p class="maodian"></p><h2>三、逻辑运算函数</h2>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 因为 R 中比较与逻辑运算都支持向量之间、向量与标量之间的运算,所以在需要一个标量结果时要特别注意,后面讲到的 if 结构、 while 结构都需要逻辑标量而且不能是缺失值。这时,应该对缺失值结果单独考虑。<br />&nbsp; &nbsp; &nbsp; &nbsp; 若 cond 是逻辑向量,用 all(cond) 测试 cond 的所有元素为真;用 any(cond) 测试 cond 至少一个元素为真。 cond 中允许有缺失值,结果可能为缺失值。如</p>
<div class="jb51code"><pre class="brush:plain;">c(1, NA, 3) &gt; 2
all(c(1, NA, 3) &gt; 2)
any(c(1, NA, 3) &gt; 2)
all(NA)
any(NA)</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="198" src="https://img.jbzj.com/file_images/article/202203/2022030410212877.png" width="580" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数 <strong>which()</strong> 返回真值对应的所有<strong>下标</strong>,如</p>
<div class="jb51code"><pre class="brush:plain;">which(c(FALSE, TRUE, TRUE, FALSE, NA))
which((11:15) &gt; 12)</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="78" src="https://img.jbzj.com/file_images/article/202203/2022030410212878.png" width="588" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数 <strong>identical(x,y) </strong> 比较两个 R 对象 x 与 y 的内容是否完全相同,结果只会取标量 TRUE 与 FALSE 两种。如</p>
<div class="jb51code"><pre class="brush:plain;">identical(c(1,2,3), c(1,2,NA))
identical(c(1L,2L,3L), c(1,2,3))</pre></div>
<p>因为前一向量是整数型,后一向量是实数型,结果返回:</p>
<p style="text-align:center"><img alt="" height="77" src="https://img.jbzj.com/file_images/article/202203/2022030410212979.png" width="580" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数<strong> all.equal()</strong> 与 <strong>identical()</strong> 类似,但是在比较数值型时<strong>不区分</strong>整数型与实数型,而且相同时返回标量 TRUE ,但是不同时会返回一个说明有何不同的字符串。如</p>
<div class="jb51code"><pre class="brush:plain;">all.equal(c(1,2,3), c(1,2,NA))
all.equal(c(1L,2L,3L), c(1,2,3))</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="78" src="https://img.jbzj.com/file_images/article/202203/2022030410212980.png" width="673" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数 <strong>duplicated()</strong> 返回每个元素是否为<strong>重复值</strong>的结果,如:</p>
<div class="jb51code"><pre class="brush:py;">duplicated(c(1,2,1,3,NA,4,NA))</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="25" src="https://img.jbzj.com/file_images/article/202203/2022030410212981.png" width="662" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用函数 <strong>unique</strong>() 可以返回<strong>去掉重复值</strong>的结果,如</p>
<div class="jb51code"><pre class="brush:py;">unique(c(1,2,1,3,NA,4,NA))</pre></div>
<p>返回:</p>
<p style="text-align:center"><img alt="" height="26" src="https://img.jbzj.com/file_images/article/202203/2022030410212982.png" width="669" /></p>
<p>&nbsp;到此这篇关于R语言逻辑型运算的实现的文章就介绍到这了,更多相关R语言逻辑型运算内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>R语言中逻辑回归知识点总结</li><li>在R语言中实现Logistic逻辑回归的操作</li><li>R语言逻辑回归深入讲解</li><li>R语言逻辑回归、ROC曲线与十折交叉验证详解</li><li>R语言多元Logistic逻辑回归应用实例</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: R语言逻辑型运算的实现