首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中如何正确地使用减号/集补运算符?

在R中如何正确地使用减号/集补运算符?
EN

Stack Overflow用户
提问于 2017-05-04 10:47:58
回答 2查看 1.5K关注 0票数 1

我想要创建一个新的数据框架,df2,通过添加一个现有的数据框架,称为df,它的一个列的值称为column的行是非零的。

我一开始尝试的是:

代码语言:javascript
复制
df2 <- df[-(df$column == 0), ]

然而,这是行不通的。所起的作用是:

代码语言:javascript
复制
df2 <- df[(df$column != 0), ]

我明白为什么第二个工作,但我不明白为什么第一个没有工作,除了操作者超载

具体来说,运行-(df$column == 0)(df$column !=0)会返回不同的结果--前者甚至不是逻辑向量,而是逻辑向量(df$column == 0)的1倍。所以在任何地方我都想要值1,它有值0,而且无论我想要它有值0,它都有值-1。现在我知道这不会那么难解决,比如说,通过写作。

1 -(df$column == 0),但重点是,我没有期望操作符-会那样运行,我希望它作为集合补码操作符运行。(也就是说,我甚至没有预料到会出现问题,所以我没有考虑如何解决这个问题。)

的具体问题::R语言如何决定是否和何时将-算子解释为:(1)设置补语算子(2)减法算子(3)乘-1?

我发现的所有文档都只提到了操作符-作为(2)减法运算符的用法,但没有提到R如何在(1)和(3)之间消除歧义。

而且,我知道(2)和(3)在数学上差不多是等价的,但这并不意味着它们的实现是相同的。(例如MATLAB中的矩阵反演。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-04 11:47:24

我认为出现复杂情况是因为您使用的值为0和1,这也是TrueFalse的数值等价物。因此,我将尝试使用df只有两行和不同数字的情况来解释上面的代码出了什么问题:

代码语言:javascript
复制
df<- data.frame(column = matrix(c(2,3), nrow=2))
> df
  column
1      2
2      3

调用(df$column==3)返回两个逻辑值:

代码语言:javascript
复制
> df1$column==3
[1] FALSE  TRUE

因为TRUE=1FALSE=0,在调用df[-(df$column == 3), ]时与调用df[-(c(0,1),]是一样的,因为在这两种情况下,您都要删除第一行(R中没有0索引)。

代码语言:javascript
复制
> df1[-(df1$column==3),]
[1] 3
> df1[-c(0,1),]
[1] 3

当您调用df[(df$column != 3),]时,情况正好相反,因为这一次您保留了第一行。

代码语言:javascript
复制
> df[(df$column != 3),]
[1] 2
> df[c(1,0), ]
[1] 2

您想要做的是删除其中的行df$column==3,但要做到这一点,您需要知道它是什么行号,所以您需要它的索引。这就是调用which函数的时候。所以你会做:

代码语言:javascript
复制
df2 <- df[-which(df1$column == 3),]

除此之外,您对-如何在R中使用的理解是正确的,我认为R根据上下文决定如何使用它。

免责声明

票数 2
EN

Stack Overflow用户

发布于 2017-05-04 11:25:45

-操作符是作为一个函数实现的,函数包含一个或两个参数。

代码语言:javascript
复制
> `-`
function (e1, e2)  .Primitive("-")

因此,表达式-a被解释为-(a)a - b被解释为-(a, b)

使用一个参数,-返回加性逆(即。它逆转了论点的符号),并用两个参数减去。

代码语言:javascript
复制
> `-`(3)
[1] -3
> `-`(3, 1)
[1] 2

它不做设置操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43780758

复制
相关文章

相似问题

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