首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑否定运算符"!“作品

逻辑否定运算符"!“作品
EN

Stack Overflow用户
提问于 2013-04-23 05:51:57
回答 3查看 18.7K关注 0票数 11

我不是试图解决任何特定的问题,而是试图学习R并理解它的逻辑否定运算符“!在http://stat.ethz.ch/R-manual/R-devel/library/base/html/Logic.html页上记录

它在与=结合使用时适用于我,在表达式中如下所示:

代码语言:javascript
复制
1 != 2
TRUE

但是我不太理解这个运算符的独立应用。例如,我是否可以使用它来选择列表中没有特定名称的元素。下面是我的尝试,但它不起作用:

代码语言:javascript
复制
vector1 <- 1:5 # just making vector of 5 numbers
vector2 <- 5:1 # same vector backwards
list <- list(Forward=vector1, Backwards=vector2) # producing list with two elements
x = "Forward"
list[!x]

我的输出是:

代码语言:javascript
复制
Error in !x : invalid argument type

我将感谢任何关于我的逻辑在这种情况下哪里出错的提示,以及除了!= case之外,这个运算符还有什么其他好的用法。

谢谢!谢尔盖

EN

回答 3

Stack Overflow用户

发布于 2013-04-23 06:02:24

首先,最好不要将!=看作作用于=!,而是完全将其看作一个单独的二元运算符。

通常,!应该只应用于布尔向量。所以这可能更像是你想要的:

代码语言:javascript
复制
vector1 <- 1:5 # just making vector of 5 numbers
vector2 <- 5:1 # same vector backwards
l <- list(Forward=vector1, Backwards=vector2) # producing list with two elements
x = "Forward"
l[!(names(l) %in% x)]

其中,names(l) %in% x沿着列表l的名称返回一个布尔向量,指示它们是否包含在x中。最后,我避免使用list作为变量,因为您可以看到它也是一个相当常见的函数。

票数 15
EN

Stack Overflow用户

发布于 2013-04-23 06:25:28

我同意其他两个帖子所说的一切,但我想再补充一件我在教授R时经常说的事情。

R的工作原理是从内部到外部对语句进行求值,并且每个语句都需要自己运行。如果在inner语句中已经有错误,难怪outers不会产生任何结果。

在您的例子中,可以说您有两个语句:!x和list accessing on list via [

如果复制R的行为,您会注意到!x已经生成了错误:

代码语言:javascript
复制
> !x
Error in !x : invalid argument type

因此,正确的解决方案会尝试改变这一步。

所以:当错误发生时,总是检查你最里面的语句,然后自己向外工作。

票数 11
EN

Stack Overflow用户

发布于 2013-04-23 06:06:15

首先,我认为!=中的!不是!运算符。它是一个distinct,!=运算符,意思是“不同于”。

其次,!运算符是一个逻辑运算符,也就是逻辑否定,它必须应用于逻辑向量:

代码语言:javascript
复制
R> !(c(TRUE,FALSE))
[1] FALSE  TRUE

由于数字可以被强制转换为逻辑,因此它也可以应用于数值向量。在这种情况下,0将被视为FALSE,任何其他值将被视为TRUE

代码语言:javascript
复制
R> !c(1,0,-2.5)
[1] FALSE  TRUE FALSE

在您的示例中,您尝试将此逻辑运算符应用于字符串,这会引发错误。

如果您想通过名称、索引或条件来设置列表、数据框或向量的子集,则应该阅读并学习R语言的索引部分,R手册和大多数介绍性书籍和文档中都对此进行了描述。

按名称对列表进行子集的一种方法可能是,例如:

代码语言:javascript
复制
R> list[!(names(list) %in% "Forward")]
$Backwards
[1] 5 4 3 2 1
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16157372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档