我不是试图解决任何特定的问题,而是试图学习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之外,这个运算符还有什么其他好的用法。
谢谢!谢尔盖
发布于 2013-04-23 06:02:24
首先,最好不要将!=看作作用于=的!,而是完全将其看作一个单独的二元运算符。
通常,!应该只应用于布尔向量。所以这可能更像是你想要的:
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作为变量,因为您可以看到它也是一个相当常见的函数。
发布于 2013-04-23 06:25:28
我同意其他两个帖子所说的一切,但我想再补充一件我在教授R时经常说的事情。
R的工作原理是从内部到外部对语句进行求值,并且每个语句都需要自己运行。如果在inner语句中已经有错误,难怪outers不会产生任何结果。
在您的例子中,可以说您有两个语句:!x和list accessing on list via [。
如果复制R的行为,您会注意到!x已经生成了错误:
> !x
Error in !x : invalid argument type因此,正确的解决方案会尝试改变这一步。
所以:当错误发生时,总是检查你最里面的语句,然后自己向外工作。
发布于 2013-04-23 06:06:15
首先,我认为!=中的!不是!运算符。它是一个distinct,!=运算符,意思是“不同于”。
其次,!运算符是一个逻辑运算符,也就是逻辑否定,它必须应用于逻辑向量:
R> !(c(TRUE,FALSE))
[1] FALSE TRUE由于数字可以被强制转换为逻辑,因此它也可以应用于数值向量。在这种情况下,0将被视为FALSE,任何其他值将被视为TRUE:
R> !c(1,0,-2.5)
[1] FALSE TRUE FALSE在您的示例中,您尝试将此逻辑运算符应用于字符串,这会引发错误。
如果您想通过名称、索引或条件来设置列表、数据框或向量的子集,则应该阅读并学习R语言的索引部分,R手册和大多数介绍性书籍和文档中都对此进行了描述。
按名称对列表进行子集的一种方法可能是,例如:
R> list[!(names(list) %in% "Forward")]
$Backwards
[1] 5 4 3 2 1https://stackoverflow.com/questions/16157372
复制相似问题