Try this: > library(gsubfn) > myexpr <- expression( ( mydata$variable1 / mydata$variable2 ) ^ 2 - 1 + 3 * 4) > strapply(as.character(myexpr), "mydata\\$(\\w+)")[[1]] [1] "variable1" "variable2"
See http://gsubfn.googlecode.com for more info on strapply. Another approach is > setdiff(all.vars(myexpr), "mydata") [1] "variable1" "variable2" On Mon, Feb 8, 2010 at 6:22 AM, christophe dutang <duta...@gmail.com> wrote: > Dear UseRs, > > > I'm trying to find variable names (string after the "mydata$") in a > expression. For example, > > myexpr <- expression( ( mydata$variable1 / mydata$variable2 ) ^ 2 - 1 + 3 * > 4 ) > > I would like to get "variable1" and "variable2". The following few lines > split the original character string into pieces. > > mystring <- as.character(myexpr) > > mydatapositions <- gregexpr("mydata", as.character(myexpr))[[1]] > > mydataend <- mydatapositions + attr(mydatapositions, "match.length") +1 > > mydatabegin <- c(mydatapositions, nchar(mystring)) > > In this loop, I try to remove operator signs, spaces and brackets. But I > could not match the hat ^ in the string. > > for(i in 1:length(mydatapositions )) > { > > nomydata <- substr(mystring, mydataend[i], mydatabegin[i+1]-1) > nomydata <- gsub("\ ","",nomydata) > print(nomydata) > > cat("_____\n") > res <- gregexpr("[+]",nomydata) > print(c(gsub("[+]","",nomydata), unlist(res))) > > res <- gregexpr("[-]",nomydata) > print(c(gsub("[-]","",nomydata), unlist(res))) > > res <- gregexpr("[/]",nomydata) > print(c(gsub("[/]","",nomydata), unlist(res))) > > res <- gregexpr("[/]",nomydata) > print(c(gsub("[*]","",nomydata), unlist(res))) > > res <- gregexpr(")",nomydata) > print(c(gsub(")","",nomydata), unlist(res))) > > res <- gregexpr("\^",nomydata) > print(c(gsub("\^","",nomydata), unlist(res))) > > print(gsub("[0-9]","",nomydata)) > > cat("-------------\n") > } > > I get the following warnings telling me the character is not recognized but > I don't know how to solve the problem... > > Warning messages: > 1: '\^' is an unrecognized escape in a character string > 2: unrecognized escape removed from "\^" > 3: '\^' is an unrecognized escape in a character string > 4: unrecognized escape removed from "\^" > > Any help is welcome. > > Christophe > > -- > Christophe DUTANG > Ph. D. student at ISFA > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org 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. > ______________________________________________ R-help@r-project.org 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.