Re: [R] string substitution for argument in function
Me again, what I really dont understand is the behaivour of R here. notice, elem is not written in brackets, why it is interpreted as string and not as a variable? I would expect an error elem not found because it is not defined as variable, but in contrary it is accepted as column name, see below: a = c('one','two','three') data =c() data=cbind(elem = 2,data) data elem [1,]2 data=cbind('elem' = 2,data) data elem elem [1,]22 elem Fehler: Objekt 'elem' nicht gefunden pedro On 26.03.2012 17:22, Prof. Dr. Pedro Martinez Arbizu wrote: HI, thanks Weidong, Henrique, this works for the example (may be a bad example, but it should be as simple as possible), This is however only a workaround to name the columns of a dataframe, but is not addressing the problem itself, that is, how can I substitute a string (used as argument in a function) within a function call in a for-loop?? I dont know if I have explain myself, something like this works well: a = c('one','two','three') data= c() for(elem in a){data=cbind('title' = elem,data)} data title title title [1,] three two one So I can use 'title' = elem within the function and it will substitute elem by a name, every loop by a different name of a list. ...but I cannot use the contrary: elem = 'something' within the function call. My real life problem is using randomForest() I want to balance the class frequency with the argument sampsize = c( 'absent' = 23, elem = 23) where elem is everytime a different name taken from a list in a for-loop. Regards Pedro On 26.03.2012 02:17, Weidong Gu wrote: Hi, This may help a = c('one','two','three') data.frame(eval(substitute(rbind(var,2),list(var=a ?substitute ?eval Weidong Gu On Sun, Mar 25, 2012 at 5:22 PM, Pedro Martinez pedro.marti...@senckenberg.de wrote: hello, I want to iterate through a list of names and use each element as an argument in a function. For instance: a = c('one','two','three') data= c() for(elem in a){data=cbind(elem = 2,data)} data elem elem elem [1,]222 instead I want 'elem' to be substituted by the string in the list. Doing it by hand would be: data = cbind('one'=2,data) data = cbind('two'=2,data) data = cbind('three'=2,data) data 'one' 'two' 'three' [1,]222 I guess that the clue would be in sub(),gsub(), paste() or similar but I didnt get it to work. I am comming from python were we woudl do something like: a = ['one','two','three'] data = {} for elem in a: data[elem] = 2 data {'three': 2, 'two': 2, 'one': 2} Thanks, Pedro - Prof. Dr. P. Martinez Arbizu DZMB-Forschungsinstitut Senckenberg Suedstrand 44 D-26382 Wilhelmshaven Germany Tel: +49 (0)4421 9475-100 Fax: +49 (0)4421 9475-111 Email: pmarti...@senckenberg.de Senckenberg Gesellschaft für Naturforschung Rechtsfähiger Verein gemäß § 22 BGB Senckenberganlage 25 60325 Frankfurt Direktorium: Prof. Dr. Dr. h.c. Volker Mosbrugger, Prof. Dr. Michael Türkay, Dr. Johannes Heilmann, Prof. Dr. Pedro Martinez Arbizu, Prof. Dr. Georg Zizka, Prof. Dr. Uwe Fritz Vorsitzender des Präsidiums: Dietmar Schmid Aufsichtsbehörde: Magistrat der Stadt Frankfurt am Main (Ordnungsamt) __ 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. -- - Prof. Dr. Pedro Martinez Arbizu Deutsches Zentrum für Marine Biodiversitätsforschung Senckenberg am Meer Südstrand 44 26382 Wilhelmshaven Tel +49 (0)4421 9475 100 Fax +49 (0)4421 9475 111 Email: pmarti...@senckenberg.de http://www.senckenberg.de/root/index.php?page_id=2141 und C.v.O. Universität Oldenburg FK V, Institut für Biologie u. Umweltwissenschaften Ag Marine Biodiversität ** Senckenberg Gesellschaft für Naturforschung Rechtsfähiger Verein gemäß § 22 BGB Senckenberganlage 25 60325 Frankfurt Direktorium: Prof. Dr. Dr. h.c. Volker Mosbrugger, Prof. Dr. Michael Türkay, Dr. Johannes Heilmann, Prof. Dr. Pedro Martinez Arbizu, Prof. Dr. Georg Zizka, Prof. Dr. Uwe Fritz Vorsitzender des Präsidiums: Dietmar Schmid Aufsichtsbehörde: Magistrat der Stadt Frankfurt am Main (Ordnungsamt) __ 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.
Re: [R] string substitution for argument in function
HI, thanks Weidong, Henrique, this works for the example (may be a bad example, but it should be as simple as possible), This is however only a workaround to name the columns of a dataframe, but is not addressing the problem itself, that is, how can I substitute a string (used as argument in a function) within a function call in a for-loop?? I dont know if I have explain myself, something like this works well: a = c('one','two','three') data= c() for(elem in a){data=cbind('title' = elem,data)} data title title title [1,] three two one So I can use 'title' = elem within the function and it will substitute elem by a name, every loop by a different name of a list. ...but I cannot use the contrary: elem = 'something' within the function call. My real life problem is using randomForest() I want to balance the class frequency with the argument sampsize = c( 'absent' = 23, elem = 23) where elem is everytime a different name taken from a list in a for-loop. Regards Pedro On 26.03.2012 02:17, Weidong Gu wrote: Hi, This may help a = c('one','two','three') data.frame(eval(substitute(rbind(var,2),list(var=a ?substitute ?eval Weidong Gu On Sun, Mar 25, 2012 at 5:22 PM, Pedro Martinez pedro.marti...@senckenberg.de wrote: hello, I want to iterate through a list of names and use each element as an argument in a function. For instance: a = c('one','two','three') data= c() for(elem in a){data=cbind(elem = 2,data)} data elem elem elem [1,]222 instead I want 'elem' to be substituted by the string in the list. Doing it by hand would be: data = cbind('one'=2,data) data = cbind('two'=2,data) data = cbind('three'=2,data) data 'one' 'two' 'three' [1,]222 I guess that the clue would be in sub(),gsub(), paste() or similar but I didnt get it to work. I am comming from python were we woudl do something like: a = ['one','two','three'] data = {} for elem in a: data[elem] = 2 data {'three': 2, 'two': 2, 'one': 2} Thanks, Pedro - Prof. Dr. P. Martinez Arbizu DZMB-Forschungsinstitut Senckenberg Suedstrand 44 D-26382 Wilhelmshaven Germany Tel: +49 (0)4421 9475-100 Fax: +49 (0)4421 9475-111 Email: pmarti...@senckenberg.de Senckenberg Gesellschaft für Naturforschung Rechtsfähiger Verein gemäß § 22 BGB Senckenberganlage 25 60325 Frankfurt Direktorium: Prof. Dr. Dr. h.c. Volker Mosbrugger, Prof. Dr. Michael Türkay, Dr. Johannes Heilmann, Prof. Dr. Pedro Martinez Arbizu, Prof. Dr. Georg Zizka, Prof. Dr. Uwe Fritz Vorsitzender des Präsidiums: Dietmar Schmid Aufsichtsbehörde: Magistrat der Stadt Frankfurt am Main (Ordnungsamt) __ 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. -- - Prof. Dr. Pedro Martinez Arbizu Deutsches Zentrum für Marine Biodiversitätsforschung Senckenberg am Meer Südstrand 44 26382 Wilhelmshaven Tel +49 (0)4421 9475 100 Fax +49 (0)4421 9475 111 Email: pmarti...@senckenberg.de http://www.senckenberg.de/root/index.php?page_id=2141 und C.v.O. Universität Oldenburg FK V, Institut für Biologie u. Umweltwissenschaften Ag Marine Biodiversität ** Senckenberg Gesellschaft für Naturforschung Rechtsfähiger Verein gemäß § 22 BGB Senckenberganlage 25 60325 Frankfurt Direktorium: Prof. Dr. Dr. h.c. Volker Mosbrugger, Prof. Dr. Michael Türkay, Dr. Johannes Heilmann, Prof. Dr. Pedro Martinez Arbizu, Prof. Dr. Georg Zizka, Prof. Dr. Uwe Fritz Vorsitzender des Präsidiums: Dietmar Schmid Aufsichtsbehörde: Magistrat der Stadt Frankfurt am Main (Ordnungsamt) __ 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] string substitution for argument in function
hello, I want to iterate through a list of names and use each element as an argument in a function. For instance: a = c('one','two','three') data= c() for(elem in a){data=cbind(elem = 2,data)} data elem elem elem [1,]222 instead I want 'elem' to be substituted by the string in the list. Doing it by hand would be: data = cbind('one'=2,data) data = cbind('two'=2,data) data = cbind('three'=2,data) data 'one' 'two' 'three' [1,]222 I guess that the clue would be in sub(),gsub(), paste() or similar but I didnt get it to work. I am comming from python were we woudl do something like: a = ['one','two','three'] data = {} for elem in a: data[elem] = 2 data {'three': 2, 'two': 2, 'one': 2} Thanks, Pedro - Prof. Dr. P. Martinez Arbizu DZMB-Forschungsinstitut Senckenberg Suedstrand 44 D-26382 Wilhelmshaven Germany Tel: +49 (0)4421 9475-100 Fax: +49 (0)4421 9475-111 Email: pmarti...@senckenberg.de Senckenberg Gesellschaft für Naturforschung Rechtsfähiger Verein gemäß § 22 BGB Senckenberganlage 25 60325 Frankfurt Direktorium: Prof. Dr. Dr. h.c. Volker Mosbrugger, Prof. Dr. Michael Türkay, Dr. Johannes Heilmann, Prof. Dr. Pedro Martinez Arbizu, Prof. Dr. Georg Zizka, Prof. Dr. Uwe Fritz Vorsitzender des Präsidiums: Dietmar Schmid Aufsichtsbehörde: Magistrat der Stadt Frankfurt am Main (Ordnungsamt) __ 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.