Ser*_*sev 10 statistics r logical-operators
我不是试图解决任何特定问题,而是试图学习R并理解其逻辑否定运算符"!" 记录在页面http://stat.ethz.ch/R-manual/R-devel/library/base/html/Logic.html
当与=结合使用时,它适用于我,例如:
1 != 2
TRUE
Run Code Online (Sandbox Code Playgroud)
但我无法理解这个运营商的独立应用.例如,我可以使用它来选择列表中没有特定名称的元素.这是我尝试这样做的,但它不起作用:
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]
Run Code Online (Sandbox Code Playgroud)
我的输出是:
Error in !x : invalid argument type
Run Code Online (Sandbox Code Playgroud)
我会理解在这种情况下我的逻辑出错的任何提示,以及除了!= case之外该运算符的其他好用途.
谢谢!谢尔盖
jor*_*ran 13
首先,最好不要将其!=视为!代理=,而应将其视为一个单独的二元运算符.
通常,!应该只应用于布尔向量.所以这可能更像你所追求的:
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)]
Run Code Online (Sandbox Code Playgroud)
where names(l) %in% x返回列表名称的布尔向量,l指示是否包含它们x.最后,我避免使用list变量,因为你可以看到它是一个相当常见的函数.
Hen*_*rik 10
我赞同其他两张海报所说的一切,但是想要在教R时再添加一件我总是说的东西.
R的工作原理是它评估从内到外的语句,每个语句都需要自己运行.如果你在内部声明中已经有错误,那就不会有outers产生任何东西了.
在你的情况下,你可以说你有两个陈述:!x并列出访问listvia [.
如果您复制R的行为,您会注意到!x已经产生错误:
> !x
Error in !x : invalid argument type
Run Code Online (Sandbox Code Playgroud)
因此,正确的解决方案试图改变这一步骤.
所以:发生错误时,请务必检查最内层的陈述,然后向外工作.
首先,我认为!in !=不是!运营商.它是一个独特的!=运算符,意思是"不同于".
其次,!运算符是逻辑运算符,逻辑否定符,它必须应用于逻辑向量:
R> !(c(TRUE,FALSE))
[1] FALSE TRUE
Run Code Online (Sandbox Code Playgroud)
由于数字可以被强制为逻辑,因此它也可以应用于数字向量.在这种情况下,0将被视为FALSE 和任何其他值TRUE:
R> !c(1,0,-2.5)
[1] FALSE TRUE FALSE
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您尝试将此逻辑运算符应用于字符串,这会引发错误.
如果要按名称,索引或条件对列表,数据框或向量进行子集化,则应阅读并了解R语言的索引部分,R语言和大多数介绍性书籍和文档中对此进行了描述.
按名称对列表进行子集的一种方法可以是,例如:
R> list[!(names(list) %in% "Forward")]
$Backwards
[1] 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14946 次 |
| 最近记录: |