[R] Looking for a function or a set of steps
@vi@e@gross m@iii@g oii gm@ii@com
@vi@e@gross m@iii@g oii gm@ii@com
Thu May 29 16:34:51 CEST 2025
Mike,
There is in a mathematical sense, no difference between:
1 - x
and
-x + 1
But for code that is compiled or interpreted, I suspect various strategies may make one be acted on a bit differently. Does the hardware for addition work differently than for subtraction? Does it implement -x by getting x and then in another operation flipping bits to negate it? Or, in some cases, if it is recognized you are dealing with very small numbers limited to 0 and 1, as can happen if you use a Boolean data type, then operations can be avoided entirely or done on single bytes or bits rather than full-blown integers and so on.
My previous point was that the solution written as
y<- (-1*x)+1
was a tad too bulky and would have been simpler if there was no use of parentheses and no multiplication. Internally -1*x may take more operations than -x while your solution may take even less.
Boolean solutions can be more compact as in
Y <- !X
And, they remove some ambiguities in that many languages allow truth values such that 5 is also true and thus the formula fails if it sees a 5 and changes it to another TRUE value like 4. When there is no reason not to, using a Boolean data type is often best for some uses.
-----Original Message-----
From: R-help <r-help-bounces using r-project.org> On Behalf Of Mike Day via R-help
Sent: Thursday, May 29, 2025 3:45 AM
To: R help Mailing list <r-help using r-project.org>
Subject: Re: [R] Looking for a function or a set of steps
What's wrong with
1-x
?
Sent from my iPad
> On 28 May 2025, at 21:41, Avi Gross <avi.e.gross using gmail.com> wrote:
>
> Paul,
>
> Perhaps slightly better and more concise is
>
> y <- -x + 1
>
> Why multiply? Of course it may be optimized in some cases.
>
>> On Tue, May 27, 2025, 3:36 AM Paul Zachos <paz using acase.org> wrote:
>>
>> Wow! Amazing stuff.
>> It will take me a while to digest all that you have offered here.
>>
>> I came up with a simple solution myself:
>> y<- (-1*x)+1
>>
>> Thank you
>> _________________
>> Paul Zachos, PhD
>> Director, Research and Evaluation
>> Association for the Cooperative Advancement of Science and Education
>> (ACASE)
>> 110 Spring Street Saratoga Springs, NY 12866 |
>> paz using acase.org | www.acase.org
>>
>>
>>
>>
>>>> On May 19, 2025, at 3:08 AM, Rui Barradas <ruipbarradas using sapo.pt> wrote:
>>>
>>> Às 18:40 de 18/05/2025, paul zachos via R-help escreveu:
>>>> Dear R Community
>>>> I am an R beginner
>>>> I have a vector of ‘1’s and ‘0’s
>>>> x
>>>> [1] 0 0 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0 1 0 1 0 1 0 0 0 0
>>>> [28] 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1
>>>> [55] 0 0 1 0 1 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0
>>>> [82] 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1
>>>> I would like to generate a new vector in which the ‘1’s in x become
>> ‘0’s and the ‘0’s in x become ‘1’s.
>>>> How should I go about this?
>>>> Thank you,
>>>> paz
>>>> ______________________________________________
>>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide
>> https://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>> Hello,
>>>
>>> A simple way is to treat x as logical and negate its values. Then coerce
>> to integer.
>>>
>>>
>>> x <- c(0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L,
>>> 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
>>> 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L,
>>> 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L,
>>> 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
>>> 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
>>> 1L)
>>>
>>>
>>> as.integer(!x)
>>> #> [1] 1 1 0 1 1 0 0 1 0 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 0 1 0
>> 1 0 0 1 1 1
>>> #> [39] 1 0 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1 1
>> 1 0 1 1 0 0
>>> #> [77] 1 1 1 1 1 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0
>>>
>>>
>>> Also, the recommended way of posting data is with ?dput:
>>>
>>>
>>> dput(x)
>>> #> c(0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L,
>>> #> 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L,
>>> #> 1L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L,
>>> #> 0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L,
>>> #> 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L,
>>> #> 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L,
>>> #> 1L)
>>>
>>>
>>> Hope this helps,
>>>
>>> Rui Barradas
>>>
>>>
>>> --
>>> Este e-mail foi analisado pelo software antivírus AVG para verificar a
>> presença de vírus.
>>> www.avg.com
>>
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> https://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________
R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list