On 27/07/2010 2:34 PM, Jorge A. Ahumada wrote:
I am writing a function where the arguments are names of objects or variable
names in a data frame. To convert the strings to the objects I am using
eval(parse(text=name)):
f.graph.two.vbs<-function(dataname,v1){
val<-paste(dataname,v1,sep="$")
val<-eval(parse(text=val))
val
}
However running this returns an error:
>f.graph.two.vbs("data","RECORD")
Error in data$RECORD : $ operator is invalid for atomic vectors
That is telling you that the object named data is not a list (or
dataframe), it's an atomic vector. When I create a dataframe named
"data", and run your code, it's fine: so I think this is simply a
scoping error. The value of your function is the same as if you had coded
data$RECORD
right in your function, and apparently the data object thus found was
not a dataframe.
Repeating the individual commands in the workspace does work though.. Do I
need to pass the object data in the arguments for this to work?
No, but you do need to make sure that the variable named by dataname is
visible from within the function, or tell eval() to do the evaluation
somewhere else. I'd guess you want
val<-eval(parse(text=val), envir=parent.frame())
Duncan Murdoch
Thanks,
Jorge
______________________________________________
[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.