[R] some question about vector[-NULL]

PO SU rhelpmaillist at 163.com
Wed Sep 10 17:53:01 CEST 2014


Tks for your 

a <- list(ress = 1, res = NULL)
And in my second question, let me explain it :
Actually i have two vectors in global enviroment, called A and B .A is initialized to NULL which used to record some index in B.
Then i would run a function F,  and each time, i would get a index value or NULL. that's,  D<-F(B). D would be NULL or  some index position in B.
But in the function F, though input is B,  i would exclude the index value from  B recorded in A. That's :
F<-function( B ) {
B<-B[-A]
some processing...
res<-NULL or some new index not included in A
return(res)
}
so in a loop,
A<-NULL
for( i in 1:100000) {
D<-F(B)
A<-c(A,D) 
}
I never know whether D is a NULL or a different index  compared with indexes already recorded in A. 
Actually, A<-c(A,D) work well, i never worry about whether D is NULL or a real index, but in the function F,  B<-B[-A] won't work.
so i hope that, e.g.  
a<-1:3
a[-NULL] wouldn't trigger an error but return a.
Because, if i wrote function like the following:

F<-function( B ) {
if( is.null(A))          
B<-B
else 
B<-B[-A]
some processing...
res<-NULL or some new index not included in A
return(res)
}
May be after 5 or 10 loops, A would already not NULL, so the added if ..else statement would be repeated in left  9999 loops which i would not like to see.
 




--

PO SU
mail: desolator88 at 163.com 
Majored in Statistics from SJTU



At 2014-09-10 06:45:59, "Duncan Murdoch" <murdoch.duncan at gmail.com> wrote:
>On 10/09/2014, 3:21 AM, PO SU wrote:
>> 
>> Dear expeRts,
>>       I have some programming questions about NULL in R.There are listed as follows:
>> 1. I find i can't let a list have a element NULL:
>> a<-list()
>> a$ress<-1
>> a$res<-NULL
>> a
>> str(a)
>
>You can do it using
>
>a <- list(ress = 1, res = NULL)
>
>> How can i know i have a named element but it is NULL, not just get a$xxxx,a$iiii,a$oooo there all get NULL
>
>That's a little harder.  There are a few ways:
>
>"res" %in% names(a) & is.null(a[["res"]])
>
>or
>
>identical(a["res"], list(res = NULL))
>
>or
>
>is.null(a[[2]])
>
>should all work.
>
>Generally because of the special handling needed, it's a bad idea to try
>to store NULL in a list.
>
>> 2.The most important thing:
>> a<-1:10
>> b<-NULL or 1
>> a<-c(a,b) will work so i don't need to know whether b is null or not,but:
>> a[-NULL] can't work!!  i just need a[-NULL]==a , how can i reach this purpose?
>
>Using !, and a logical test, e.g.
>
>a[!nullentry(a)]
>
>where nullentry() is a function based on one of the tests above, but
>applied to all entries.
>
>Duncan Murdoch
>


More information about the R-help mailing list