M[,x] <- 0 *does not do the same* !! even if x only contains 0's and 1's
To understand this, note that
M[,c(2,3)]
gives columns 2 and 3
M[,c(0,3)]
gives the 3rd column and
M[,c(0,1,0)]
gives the *first* column!!
On Mon, Apr 25, 2022 at 5:41 PM Ivan Calandra <ivan.calan...@rgzm.de>
wrote:
Indeed, M[, x] <- 0 does the same, but only if x is 0's and 1's only,
right? I thought that it might not always be the case so I choose
this
maybe superflous approach.
M[, 2] does the same of course in the example, but I was assuming
that
the columns to change to zero are not known in advance and are
based on
data contained in another vector. Where that vector comes from is
important too because the whole thing might be unnecessary. Is that
maybe what you were hinting at, Bert?
Maybe Uwe can tell us more about what/why he wants to do!
Ivan
--
Dr. Ivan Calandra
Imaging lab
RGZM - MONREPOS Archaeological Research Centre
Schloss Monrepos
56567 Neuwied, Germany
+49 (0) 2631 9772-243
https://www.researchgate.net/profile/Ivan_Calandra
On 25/04/2022 16:30, Bert Gunter wrote:
> x == 1 is the same as M[, x] so your expression is the same as
> M[, c(FALSE, TRUE, FALSE)] <- 0
> which is the same as M[, 2] <- 0
>
> So what is the point of all this, exactly?
>
> Bert
>
> On Mon, Apr 25, 2022 at 7:18 AM Ivan Calandra
<ivan.calan...@rgzm.de> wrote:
>> Hi Uwe,
>>
>> If I understood the problem completely and building up on Tim's
answer,
>> this is even easier:
>> M <- A <- matrix(1:9, ncol = 3)
>> x <- c(0, 1, 0)
>> M[, x == 1] <- 0
>> M
>>
>> The original issue was with the way ifelse works. The
explanation is in
>> the help page: "ifelse returns a value with the same shape as
test||".
>> So, because x[i] == 0 returns a single value (TRUE or FALSE),
ifelse
>> will also return a single value (either A[, i][1] or 0) and not
a vector
>> of length 3 as you wanted. This single value is recycled to
fill M[, i],
>> hence the result.
>>
>> HTH,
>> Ivan
>>
>> --
>> Dr. Ivan Calandra
>> Imaging lab
>> RGZM - MONREPOS Archaeological Research Centre
>> Schloss Monrepos
>> 56567 Neuwied, Germany
>> +49 (0) 2631 9772-243
>> https://www.researchgate.net/profile/Ivan_Calandra
>>
>> On 25/04/2022 16:01, Ebert,Timothy Aaron wrote:
>>> A <- matrix(1:9,ncol=3)
>>> x <- c(0,1,0)
>>> M <- matrix(ncol=3,nrow=3)
>>> M<-A
>>> for(i in 1:3) {
>>> if(x[i]){
>>> M[,i] <-0
>>> }
>>> }
>>> }
>>> M
>>>
>>> The outcome you want is to set all of the middle column values
to zero. So I used x as a logical in an if test and when true
everything in that column is set to zero.
>>>
>>> Your approach also works but you must go through each element
explicitly.
>>> A <- matrix(1:9,ncol=3)
>>> x <- c(0,1,0)
>>> M <- matrix(ncol=3,nrow=3)
>>> for(j in 1:3){
>>> for(i in 1:3){
>>> ifelse(x[i]==1, M[j,i]<-0, M[j,i]<-A[j,i])
>>> }
>>> }
>>> M
>>>
>>>
>>>
>>> Tim
>>>
>>> -----Original Message-----
>>> From: R-help <r-help-boun...@r-project.org> On Behalf Of Uwe
Freier
>>> Sent: Sunday, April 24, 2022 11:06 AM
>>> To: r-help@r-project.org
>>> Subject: [R] Confusing fori or ifelse result in matrix
manipulation
>>>
>>> [External Email]
>>>
>>> Hello,
>>>
>>> sorry for the newbie question but I can't find out where I'm
wrong.
>>>
>>> A <- matrix(1:9,ncol=3)
>>> x <- c(0,1,0)
>>> M <- matrix(ncol=3,nrow=3)
>>> for(i in 1:3) {
>>> M[,i] <- ifelse(x[i] == 0, A[,i], 0)
>>> }
>>>
>>> expected:
>>>
>>>> M
>>> [,1] [,2] [,3]
>>> [1,] 1 0 7
>>> [2,] 2 0 8
>>> [3,] 3 0 9
>>>
>>>
>>> but the result is:
>>>
>>>> M
>>> [,1] [,2] [,3]
>>> [1,] 1 0 7
>>> [2,] 1 0 7
>>> [3,] 1 0 7
>>>
>>>
>>> If I do it "manually":
>>>
>>>> M[,1] <- A[,1]
>>>> M[,2] <- 0
>>>> M[,3] <- A[,3]
>>> M is as expected, where is my misconception?
>>>
>>> Thanks for any hint and best regards,
>>>
>>> Uwe
>>>
>>> ______________________________________________
>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more,
see
https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Dhelp&d=DwICAg&c=sJ6xIWYx-zLMB3EPkvcnVg&r=9PEhQh2kVeAsRzsn7AkP-g&m=eyJm06tVDfKvtMDgz6oIWM-WVdoW3Szzb5G6rq0cCO_cB6ljj2x80E4oRkt3Vgba&s=K2RWPvtxaxwigGGH2oOrg8qiDWC5KTu60b8Wjybwsg4&e=
<https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Dhelp&d=DwICAg&c=sJ6xIWYx-zLMB3EPkvcnVg&r=9PEhQh2kVeAsRzsn7AkP-g&m=eyJm06tVDfKvtMDgz6oIWM-WVdoW3Szzb5G6rq0cCO_cB6ljj2x80E4oRkt3Vgba&s=K2RWPvtxaxwigGGH2oOrg8qiDWC5KTu60b8Wjybwsg4&e=>
>>> PLEASE do read the posting guide
https://urldefense.proofpoint.com/v2/url?u=http-3A__www.R-2Dproject.org_posting-2Dguide.html&d=DwICAg&c=sJ6xIWYx-zLMB3EPkvcnVg&r=9PEhQh2kVeAsRzsn7AkP-g&m=eyJm06tVDfKvtMDgz6oIWM-WVdoW3Szzb5G6rq0cCO_cB6ljj2x80E4oRkt3Vgba&s=L9VXAAYzIzrG2h17hBO-Qfg_EoS2mRQbjs3sRESp62Q&e=
<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.R-2Dproject.org_posting-2Dguide.html&d=DwICAg&c=sJ6xIWYx-zLMB3EPkvcnVg&r=9PEhQh2kVeAsRzsn7AkP-g&m=eyJm06tVDfKvtMDgz6oIWM-WVdoW3Szzb5G6rq0cCO_cB6ljj2x80E4oRkt3Vgba&s=L9VXAAYzIzrG2h17hBO-Qfg_EoS2mRQbjs3sRESp62Q&e=>
>>> and provide commented, minimal, self-contained, reproducible
code.
>>>
>>> ______________________________________________
>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
<http://www.R-project.org/posting-guide.html>
>>> and provide commented, minimal, self-contained, reproducible
code.
>> ______________________________________________
>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
<http://www.R-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
<http://www.R-project.org/posting-guide.html>
and provide commented, minimal, self-contained, reproducible code.