Tks, i think using logical index is a way, but to do that, i have to keep a vector as long as the original vector. that's, to exclude position 1 and 3 from a<-1:5 I have to let b<-c(F,T,F,T,T) and exec a[b], not a[-c(1,3)]. which c(1,3) is much shorter than b if a is a long vector. that's, b would be c(F,T,F,T,T,T,T,......,T) I thought a way , let d<-c(a,1) that d<-c(1,2,3,4,5,1) and initialize the index vector iv to length(d). that is iv<-6. then, d[-iv] is always equal a[- i ] , whether i is NULL or not. Because if i is NULL ,then iv is 6, if i is 2.then iv is c(2,6) and so on.......
-- PO SU mail: [email protected] Majored in Statistics from SJTU At 2014-09-11 01:58:46, "Duncan Murdoch" <[email protected]> wrote: >On 10/09/2014 12:20 PM, William Dunlap wrote: >> Can you make your example a bit more concrete? E.g., is your 'index >> vector' A an integer vector? If so, integer(0), an integer vector >> with no elements, would be a more reasonable return value than NULL, >> an object of class NULL with length 0, for the 'not found' case and >> you could check for that case by asking if length(A)==0. >> >> Show us typical inputs and expected outputs for your function (i.e., >> the problem you want to solve). > >I think the problem with integer(0) and NULL is the same: a[-i] doesn't >act as expected (leaving out all the elements of i, i.e. nothing) if i >is either of those. The solution is to use logical indexing, not >negative numerical indexing. > >Duncan Murdoch >> >> Bill Dunlap >> TIBCO Software >> wdunlap tibco.com >> >> >> On Wed, Sep 10, 2014 at 8:53 AM, PO SU <[email protected]> wrote: >> > >> > 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: [email protected] >> > Majored in Statistics from SJTU >> > >> > >> > >> > At 2014-09-10 06:45:59, "Duncan Murdoch" <[email protected]> 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 >> >> >> > ______________________________________________ >> > [email protected] mailing list >> > https://stat.ethz.ch/mailman/listinfo/r-help >> > PLEASE do read the posting guide >> > http://www.R-project.org/posting-guide.html >> > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

