逻辑否定运算符“!”如何作品
我不是想解决任何特定问题,而是试图学习R并理解其逻辑否定运算符“!”记录http://stat.ethz.ch/R-manual/R-devel/library/base/html/Logic.html页逻辑否定运算符“!”如何作品
上,结合=使用时,它为我的作品,在表现形式,例如:
1 != 2
TRUE
但我不能完全理解这种操作的独立应用程序。例如,我可以使用它来选择没有特定名称的列表元素。这里是我试图做到这一点,但没有奏效:
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]
我的输出是:
Error in !x : invalid argument type
会明白在哪里我的逻辑在这种情况下出现问题的任何提示,有什么其他的好除了!= case外,该运算符的用法。
谢谢! 谢尔盖
首先,它可能是最好不去想!=
为!
作用于=
,而是作为一个独立的二进制运算符干脆。
一般而言,!
只应用于布尔向量。所以这可能是更喜欢你所追求的:
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
返回沿,表明它们是否包含在x
或不在名单l
的名称的布尔向量。最后,我避免使用list
作为变量,因为您可以看到它也是一个相当常见的功能。
首先,我认为!
在!=
不是!
运算符。这是一个明显的,!=
运营商,这意味着“不同于”。
其次,!
操作者是逻辑一,逻辑否定,并且它必须被施加到逻辑矢量:
R> !(c(TRUE,FALSE))
[1] FALSE TRUE
如号码可被强制转换为逻辑,它也可以被应用到数值矢量。在这种情况下0
将被视为FALSE
和任何其他价值TRUE
:
R> !c(1,0,-2.5)
[1] FALSE TRUE FALSE
在您的例子,你想这个逻辑运算符适用于字符串,这引起了一个错误。
如果您想要通过名称,索引或条件对列表,数据框或向量进行子集化,您应该阅读并了解R语言的索引部分,R语言的索引部分将在R手册和大多数入门书籍和文档。以子组名称的列表
的一种方法是,例如:
R> list[!(names(list) %in% "Forward")]
$Backwards
[1] 5 4 3 2 1
我同意的一切由其他两个海报说,但要加上一句话,就是教R.时,我总是告诉
R的作用在于它从内部到外部评估语句,并且每个语句都需要独立运行。如果你在内部陈述中已经有了一个错误,难怪外人不会产生任何东西。
在你的情况下,人们可以说你有两条语句:!x
和list
的列表通过[
访问。
如果你复制的r行为您发现!x
已经产生错误:
> !x
Error in !x : invalid argument type
因此,正确的解决方案,试图改变这一步。
因此:当发生错误并且向外工作时,请务必检查最内层的语句。
乔兰,非常感谢澄清和解释,现在对我来说都是有意义的。 – 2013-04-22 23:06:10