Actually fun( param != something..) is syntactically incorrect in the first place for any function! ls sees "pat != whatever" as the "name" argument of ls() and can't make any sense of it, of course. Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Wed, Jul 14, 2021 at 5:01 PM Andrew Simmons <akwsimmo at gmail.com> wrote:> Hello, > > > First, `ls` does not support `!=` for pattern, but it's actually throwing a > different error. For `rm`, the objects provided into `...` are substituted > (not evaluated), so you should really do something like > > rm(list = ls(pattern = ...)) > > As for all except "con", "DB2", and "ora", I would try something like > > setdiff(ls(), c("con", "DB2", "ora")) > > and then add `rm` to that like > > rm(list = setdiff(ls(), c("con", "DB2", "ora"))) > > On Wed, Jul 14, 2021 at 7:41 PM Kai Yang via R-help <r-help at r-project.org> > wrote: > > > Hello List, > > I have many data frames in environment. I need to keep 3 data frames > > only, con DB2 and ora. > > I write the script to do this. > > rm(ls(pattern != c("(con|DB2|ora)"))) > > > > > > but it give me an error message: > > > > > > Error in rm(ls(pattern != c("(con|DB2|ora)"))) : > > ... must contain names or character strings > > > > I think the pattern option doesn't support != ? and is it possible to fix > > this? > > Thank you, > > Kai > > > > > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at 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 > > and provide commented, minimal, self-contained, reproducible code. > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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 > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Thanks Andrew. it works well. --- Kai On Wednesday, July 14, 2021, 05:22:01 PM PDT, Bert Gunter <bgunter.4567 at gmail.com> wrote: Actually fun( param != something..) is syntactically incorrect in the first place for any function! ls sees "pat != whatever"? as the "name" argument of ls() and can't make any sense of it, of course. Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Wed, Jul 14, 2021 at 5:01 PM Andrew Simmons <akwsimmo at gmail.com> wrote: Hello, First, `ls` does not support `!=` for pattern, but it's actually throwing a different error. For `rm`, the objects provided into `...` are substituted (not evaluated), so you should really do something like rm(list = ls(pattern = ...)) As for all except "con", "DB2", and "ora", I would try something like setdiff(ls(), c("con", "DB2", "ora")) and then add `rm` to that like rm(list = setdiff(ls(), c("con", "DB2", "ora"))) On Wed, Jul 14, 2021 at 7:41 PM Kai Yang via R-help <r-help at r-project.org> wrote:> Hello List, > I have many data frames in environment.? I need to keep 3 data frames > only, con DB2 and ora. > I write the script to do this. > rm(ls(pattern != c("(con|DB2|ora)"))) > > > but it give me an error message: > > > Error in rm(ls(pattern != c("(con|DB2|ora)"))) : >? ?... must contain names or character strings > > I think the pattern option doesn't support != ? and is it possible to fix > this? > Thank you, > Kai > > > >? ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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 > and provide commented, minimal, self-contained, reproducible code. >? ? ? ? [[alternative HTML version deleted]] ______________________________________________ R-help at 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 and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]]
On 14/07/2021 8:21 p.m., Bert Gunter wrote:> Actually fun( param != something..) is syntactically incorrect in the first > place for any function!You have to be careful with absolute statements: > f <- function(pattern) cat("It's legal!") > f(pattern != something..) It's legal! "pattern != something.." is a legal expression, which would return a logical vector. My function didn't ever evaluate it, so the fact that variables named "pattern" and "something.." didn't exist in the global env didn't make any difference. It's legal syntax, just wrong. Duncan Murdoch> > ls sees "pat != whatever" as the "name" argument of ls() and can't make > any sense of it, of course. > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along and > sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > > On Wed, Jul 14, 2021 at 5:01 PM Andrew Simmons <akwsimmo at gmail.com> wrote: > >> Hello, >> >> >> First, `ls` does not support `!=` for pattern, but it's actually throwing a >> different error. For `rm`, the objects provided into `...` are substituted >> (not evaluated), so you should really do something like >> >> rm(list = ls(pattern = ...)) >> >> As for all except "con", "DB2", and "ora", I would try something like >> >> setdiff(ls(), c("con", "DB2", "ora")) >> >> and then add `rm` to that like >> >> rm(list = setdiff(ls(), c("con", "DB2", "ora"))) >> >> On Wed, Jul 14, 2021 at 7:41 PM Kai Yang via R-help <r-help at r-project.org> >> wrote: >> >>> Hello List, >>> I have many data frames in environment. I need to keep 3 data frames >>> only, con DB2 and ora. >>> I write the script to do this. >>> rm(ls(pattern != c("(con|DB2|ora)"))) >>> >>> >>> but it give me an error message: >>> >>> >>> Error in rm(ls(pattern != c("(con|DB2|ora)"))) : >>> ... must contain names or character strings >>> >>> I think the pattern option doesn't support != ? and is it possible to fix >>> this? >>> Thank you, >>> Kai >>> >>> >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-help at 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 >>> and provide commented, minimal, self-contained, reproducible code. >>> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at 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 >> and provide commented, minimal, self-contained, reproducible code. >> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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 > and provide commented, minimal, self-contained, reproducible code. >