Dear all, i have a problem with processing dataframes within a function using the "$". Here´s my code: recode_items = function(dataframe,number,medium=2){ # this works q<-paste("columna",number,sep="") # this does not work, particularly because "dataframe" is not processed # dataframe should be: givenframe$columnagivennumber a=dataframe$q[dataframe$q==medium]=1 return(a) } If I call this function, i´d like it to return my dataframe. The problem appears to be somewhere around the $. I´m sure this not too hard, but somehow i am stuck. I´ll keep searchin the manuals. Thx for any help in advance. best matt [[alternative HTML version deleted]]
On Apr 28, 2010, at 5:31 PM, Bunny, lautloscrew.com wrote:> Dear all, > > i have a problem with processing dataframes within a function using > the "$". > Here?s my code: > > > recode_items = function(dataframe,number,medium=2){ > > # this works > q<-paste("columna",number,sep="")Do your really want q to equal "columna2" when "number" equals 2?> > # this does not work, particularly because "dataframe" is not > processed > # dataframe should be: givenframe$columnagivennumber > a=dataframe$q[dataframe$q==medium]=1a) Do you want to work on the column from dataframe ( horrible name for this purpose IMO) with the name "columna2"? If so, then start with dataframe[ , q ] .... the "q" will be evaluated in this form whereas it would not when used with "$". b) (A guess in absence of explanation of a goal.) Now do you want all of the rows where that vector equals "medium"? If so ,then try this: dataframe[ dataframe[ , q ]==2 , ] # untested in the absence of data Moral: Generally better to use "[" indexing. -- David.> > > return(a) > > } > > > If I call this function, i?d like it to return my dataframe. The > problem appears to be somewhere around the $. I?m sure this not too > hard, but somehow i am stuck. I?ll keep searchin the manuals. > Thx for any help in advance. > > best > > matt > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.
On Apr 28, 2010, at 5:45 PM, David Winsemius wrote:> > On Apr 28, 2010, at 5:31 PM, Bunny, lautloscrew.com wrote: > >> Dear all, >> >> i have a problem with processing dataframes within a function using >> the "$". >> Here?s my code: >> >> >> recode_items = function(dataframe,number,medium=2){ >> >> # this works >> q<-paste("columna",number,sep="") > > Do your really want q to equal "columna2" when "number" equals 2? > >> >> # this does not work, particularly because "dataframe" is not >> processed >> # dataframe should be: givenframe$columnagivennumber >> a=dataframe$q[dataframe$q==medium]=1Did you want a further logical test with that "=1" or some sort of assignment???> > a) Do you want to work on the column from dataframe ( horrible name > for this purpose IMO) with the name "columna2"? If so, then start with > > dataframe[ , q ] > > .... the "q" will be evaluated in this form whereas it would not > when used with "$". > > b) (A guess in absence of explanation of a goal.) Now do you want > all of the rows where that vector equals "medium"? If so ,then try > this: > > dataframe[ dataframe[ , q ]==2 , ] # untested in the absence of dataOoops. should have been: dataframe[ dataframe[ , q ]==medium , ] #since both q and medium will be evaluated.> > Moral: Generally better to use "[" indexing. > > -- > David. > > >> >> >> return(a) >> >> } >> >> >> If I call this function, i?d like it to return my dataframe. The >> problem appears to be somewhere around the $. I?m sure this not too >> hard, but somehow i am stuck. I?ll keep searchin the manuals. >> Thx for any help in advance. >> >> best >> >> matt >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at 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 at 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.
Sorry for that offlist post, did not mean to do it intentionally. just hit the wrong button. Unfortunately this disadvantage is not written next to $ in the manual.> > On Apr 29, 2010, at 2:34 AM, Bunny, lautloscrew.com wrote: > >> David, >> >> With your help i finally got it. THX! >> sorry for handing out some ugly names. >> Reason being: it?s a german dataset with german variable names. With those german names you are always sure you dont use a forbidden >> name. I just did not want to hit one of those by accident when changing these names for the mailing list. columna is just the latin term for column :) . Anyway here?s what worked >> >> note: I just tried to use some more "real" names here. >> >> recode_items = function(dataframe,question_number,medium=3){ >> >> #note column names of the initial data.frame are like Question1,Question2 etc. Using [,1] would not be very practical since # the df contains some other data too. Indexing by names seemed to most comfortable way so far. >> question<-paste("Question",question_number,sep="") >> # needed indexing here that understands characters, that?s why going with [,question_number] did not work. >> dataframe[question][dataframe[question]==3]=0 > > This would be more typical: > > dataframe[dataframe[question]==3, question] <- 0 > >> >> >> return(dataframe) >> >> } >> >> recode_items(mydataframe,question_number,3) >> # this call uses the dataframe that contains the answers of survey participants. Question number is an argument that selects the question from the dataframe that should be recoded. In surveys some weighting schemes only respect extreme answers, which is why the medium answer is recoded to zero. Since it depends on the item scale what medium actually is, I need it to be an argument of my function. >> >>> Did you want a further logical test with that "=1" or some sort of assignment??? >> >> So yes, it?s an assignment. >> >>>> Moral: Generally better to use "[" indexing. >> >> That?s what really made my day (and it?s only 9.30 a.m. here ) . Are there exceptions to rule? > > Not that I know of. > >> I just worked a lot with the $ in the past. > > "$colname" is just syntactic sugar for either "["colname"]" or "[ ,"colname"]" and it has the disadvantage that colname is not evaluated. > > >> >> thx >> >> matt >> >> >> >> >> On 29.04.2010, at 00:56, David Winsemius wrote: >> >>> >>> On Apr 28, 2010, at 5:45 PM, David Winsemius wrote: >>> >>>> >>>> On Apr 28, 2010, at 5:31 PM, Bunny, lautloscrew.com wrote: >>>> >>>>> Dear all, >>>>> >>>>> i have a problem with processing dataframes within a function using the "$". >>>>> Here?s my code: >>>>> >>>>> >>>>> recode_items = function(dataframe,number,medium=2){ >>>>> >>>>> # this works >>>>> q<-paste("columna",number,sep="") >>>> >>>> Do your really want q to equal "columna2" when "number" equals 2? >>>> >>>>> >>>>> # this does not work, particularly because "dataframe" is not processed >>>>> # dataframe should be: givenframe$columnagivennumber >>>>> a=dataframe$q[dataframe$q==medium]=1 >>> >>> Did you want a further logical test with that "=1" or some sort of assignment??? >>> >>>> >>>> a) Do you want to work on the column from dataframe ( horrible name for this purpose IMO) with the name "columna2"? If so, then start with >>>> >>>> dataframe[ , q ] >>>> >>>> .... the "q" will be evaluated in this form whereas it would not when used with "$". >>>> >>>> b) (A guess in absence of explanation of a goal.) Now do you want all of the rows where that vector equals "medium"? If so ,then try this: >>>> >>>> dataframe[ dataframe[ , q ]==2 , ] # untested in the absence of data >>> >>> Ooops. should have been: >>> >>> dataframe[ dataframe[ , q ]==medium , ] #since both q and medium will be evaluated. >>> >>> >>>> >>>> Moral: Generally better to use "[" indexing. >>>> >>>> -- >>>> David. >>>> >>>> >>>>> >>>>> >>>>> return(a) >>>>> >>>>> } >>>>> >>>>> >>>>> If I call this function, i?d like it to return my dataframe. The problem appears to be somewhere around the $. I?m sure this not too hard, but somehow i am stuck. I?ll keep searchin the manuals. >>>>> Thx for any help in advance. >>>>> >>>>> best >>>>> >>>>> matt >>>>> [[alternative HTML version deleted]] >>>>> >>>>> ______________________________________________ >>>>> R-help at 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 at 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. >>> >> >
On Apr 29, 2010, at 9:03 AM, Bunny, lautloscrew.com wrote:> Sorry for that offlist post, did not mean to do it intentionally. > just hit the wrong button. Unfortunately this disadvantage is not > written next to $ in the manual.Hmmm. Not my manual: "Both [[ and $ select a single element of the list. The main difference is that $ does not allow computed indices, whereas [[does." It also says that the correct equivalent using extraction operators of "$" would be: x$name == x[["name", exact = FALSE]] -- David.> > >> >> On Apr 29, 2010, at 2:34 AM, Bunny, lautloscrew.com wrote: >> >>> David, >>> >>> With your help i finally got it. THX! >>> sorry for handing out some ugly names. >>> Reason being: it?s a german dataset with german variable names. >>> With those german names you are always sure you dont use a forbidden >>> name. I just did not want to hit one of those by accident when >>> changing these names for the mailing list. columna is just the >>> latin term for column :) . Anyway here?s what worked >>> >>> note: I just tried to use some more "real" names here. >>> >>> recode_items = function(dataframe,question_number,medium=3){ >>> >>> #note column names of the initial data.frame are like >>> Question1,Question2 etc. Using [,1] would not be very practical >>> since # the df contains some other data too. Indexing by names >>> seemed to most comfortable way so far. >>> question<-paste("Question",question_number,sep="") >>> # needed indexing here that understands characters, that?s why >>> going with [,question_number] did not work. >>> dataframe[question][dataframe[question]==3]=0 >> >> This would be more typical: >> >> dataframe[dataframe[question]==3, question] <- 0 >> >>> >>> >>> return(dataframe) >>> >>> } >>> >>> recode_items(mydataframe,question_number,3) >>> # this call uses the dataframe that contains the answers of survey >>> participants. Question number is an argument that selects the >>> question from the dataframe that should be recoded. In surveys >>> some weighting schemes only respect extreme answers, which is why >>> the medium answer is recoded to zero. Since it depends on the item >>> scale what medium actually is, I need it to be an argument of my >>> function. >>> >>>> Did you want a further logical test with that "=1" or some sort >>>> of assignment??? >>> >>> So yes, it?s an assignment. >>> >>>>> Moral: Generally better to use "[" indexing. >>> >>> That?s what really made my day (and it?s only 9.30 a.m. here ) . >>> Are there exceptions to rule? >> >> Not that I know of. >> >>> I just worked a lot with the $ in the past. >> >> "$colname" is just syntactic sugar for either "["colname"]" or >> "[ ,"colname"]" and it has the disadvantage that colname is not >> evaluated. >> >> >>> >>> thx >>> >>> matt >>> >>> >>> >>> >>> On 29.04.2010, at 00:56, David Winsemius wrote: >>> >>>> >>>> On Apr 28, 2010, at 5:45 PM, David Winsemius wrote: >>>> >>>>> >>>>> On Apr 28, 2010, at 5:31 PM, Bunny, lautloscrew.com wrote: >>>>> >>>>>> Dear all, >>>>>> >>>>>> i have a problem with processing dataframes within a function >>>>>> using the "$". >>>>>> Here?s my code: >>>>>> >>>>>> >>>>>> recode_items = function(dataframe,number,medium=2){ >>>>>> >>>>>> # this works >>>>>> q<-paste("columna",number,sep="") >>>>> >>>>> Do your really want q to equal "columna2" when "number" equals 2? >>>>> >>>>>> >>>>>> # this does not work, particularly because "dataframe" is not >>>>>> processed >>>>>> # dataframe should be: givenframe$columnagivennumber >>>>>> a=dataframe$q[dataframe$q==medium]=1 >>>> >>>> Did you want a further logical test with that "=1" or some sort >>>> of assignment??? >>>> >>>>> >>>>> a) Do you want to work on the column from dataframe ( horrible >>>>> name for this purpose IMO) with the name "columna2"? If so, then >>>>> start with >>>>> >>>>> dataframe[ , q ] >>>>> >>>>> .... the "q" will be evaluated in this form whereas it would not >>>>> when used with "$". >>>>> >>>>> b) (A guess in absence of explanation of a goal.) Now do you >>>>> want all of the rows where that vector equals "medium"? If >>>>> so ,then try this: >>>>> >>>>> dataframe[ dataframe[ , q ]==2 , ] # untested in the absence of >>>>> data >>>> >>>> Ooops. should have been: >>>> >>>> dataframe[ dataframe[ , q ]==medium , ] #since both q and medium >>>> will be evaluated. >>>> >>>> >>>>> >>>>> Moral: Generally better to use "[" indexing. >>>>> >>>>> -- >>>>> David. >>>>> >>>>> >>>>>> >>>>>> >>>>>> return(a) >>>>>> >>>>>> } >>>>>> >>>>>> >>>>>> If I call this function, i?d like it to return my dataframe. >>>>>> The problem appears to be somewhere around the $. I?m sure this >>>>>> not too hard, but somehow i am stuck. I?ll keep searchin the >>>>>> manuals. >>>>>> Thx for any help in advance. >>>>>> >>>>>> best >>>>>> >>>>>> matt >>>>>> [[alternative HTML version deleted]] >>>>>> >>>>>> ______________________________________________ >>>>>> R-help at 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 at 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. >>>> >>> >> >David Winsemius, MD West Hartford, CT
Nice, thx. Which manual do you use ? an introduction to R ? Or something special ? matt On 29.04.2010, at 15:25, David Winsemius wrote:> > On Apr 29, 2010, at 9:03 AM, Bunny, lautloscrew.com wrote: > >> Sorry for that offlist post, did not mean to do it intentionally. just hit the wrong button. Unfortunately this disadvantage is not written next to $ in the manual. > > Hmmm. Not my manual: > > "Both [[ and $ select a single element of the list. The main difference is that $ does not allow computed indices, whereas [[does." > > > It also says that the correct equivalent using extraction operators of "$" would be: > > x$name == x[["name", exact = FALSE]] > -- > David. >> >> >>> >>> On Apr 29, 2010, at 2:34 AM, Bunny, lautloscrew.com wrote: >>> >>>> David, >>>> >>>> With your help i finally got it. THX! >>>> sorry for handing out some ugly names. >>>> Reason being: it?s a german dataset with german variable names. With those german names you are always sure you dont use a forbidden >>>> name. I just did not want to hit one of those by accident when changing these names for the mailing list. columna is just the latin term for column :) . Anyway here?s what worked >>>> >>>> note: I just tried to use some more "real" names here. >>>> >>>> recode_items = function(dataframe,question_number,medium=3){ >>>> >>>> #note column names of the initial data.frame are like Question1,Question2 etc. Using [,1] would not be very practical since # the df contains some other data too. Indexing by names seemed to most comfortable way so far. >>>> question<-paste("Question",question_number,sep="") >>>> # needed indexing here that understands characters, that?s why going with [,question_number] did not work. >>>> dataframe[question][dataframe[question]==3]=0 >>> >>> This would be more typical: >>> >>> dataframe[dataframe[question]==3, question] <- 0 >>> >>>> >>>> >>>> return(dataframe) >>>> >>>> } >>>> >>>> recode_items(mydataframe,question_number,3) >>>> # this call uses the dataframe that contains the answers of survey participants. Question number is an argument that selects the question from the dataframe that should be recoded. In surveys some weighting schemes only respect extreme answers, which is why the medium answer is recoded to zero. Since it depends on the item scale what medium actually is, I need it to be an argument of my function. >>>> >>>>> Did you want a further logical test with that "=1" or some sort of assignment??? >>>> >>>> So yes, it?s an assignment. >>>> >>>>>> Moral: Generally better to use "[" indexing. >>>> >>>> That?s what really made my day (and it?s only 9.30 a.m. here ) . Are there exceptions to rule? >>> >>> Not that I know of. >>> >>>> I just worked a lot with the $ in the past. >>> >>> "$colname" is just syntactic sugar for either "["colname"]" or "[ ,"colname"]" and it has the disadvantage that colname is not evaluated. >>> >>> >>>> >>>> thx >>>> >>>> matt >>>> >>>> >>>> >>>> >>>> On 29.04.2010, at 00:56, David Winsemius wrote: >>>> >>>>> >>>>> On Apr 28, 2010, at 5:45 PM, David Winsemius wrote: >>>>> >>>>>> >>>>>> On Apr 28, 2010, at 5:31 PM, Bunny, lautloscrew.com wrote: >>>>>> >>>>>>> Dear all, >>>>>>> >>>>>>> i have a problem with processing dataframes within a function using the "$". >>>>>>> Here?s my code: >>>>>>> >>>>>>> >>>>>>> recode_items = function(dataframe,number,medium=2){ >>>>>>> >>>>>>> # this works >>>>>>> q<-paste("columna",number,sep="") >>>>>> >>>>>> Do your really want q to equal "columna2" when "number" equals 2? >>>>>> >>>>>>> >>>>>>> # this does not work, particularly because "dataframe" is not processed >>>>>>> # dataframe should be: givenframe$columnagivennumber >>>>>>> a=dataframe$q[dataframe$q==medium]=1 >>>>> >>>>> Did you want a further logical test with that "=1" or some sort of assignment??? >>>>> >>>>>> >>>>>> a) Do you want to work on the column from dataframe ( horrible name for this purpose IMO) with the name "columna2"? If so, then start with >>>>>> >>>>>> dataframe[ , q ] >>>>>> >>>>>> .... the "q" will be evaluated in this form whereas it would not when used with "$". >>>>>> >>>>>> b) (A guess in absence of explanation of a goal.) Now do you want all of the rows where that vector equals "medium"? If so ,then try this: >>>>>> >>>>>> dataframe[ dataframe[ , q ]==2 , ] # untested in the absence of data >>>>> >>>>> Ooops. should have been: >>>>> >>>>> dataframe[ dataframe[ , q ]==medium , ] #since both q and medium will be evaluated. >>>>> >>>>> >>>>>> >>>>>> Moral: Generally better to use "[" indexing. >>>>>> >>>>>> -- >>>>>> David. >>>>>> >>>>>> >>>>>>> >>>>>>> >>>>>>> return(a) >>>>>>> >>>>>>> } >>>>>>> >>>>>>> >>>>>>> If I call this function, i?d like it to return my dataframe. The problem appears to be somewhere around the $. I?m sure this not too hard, but somehow i am stuck. I?ll keep searchin the manuals. >>>>>>> Thx for any help in advance. >>>>>>> >>>>>>> best >>>>>>> >>>>>>> matt >>>>>>> [[alternative HTML version deleted]] >>>>>>> >>>>>>> ______________________________________________ >>>>>>> R-help at 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 at 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. >>>>> >>>> >>> >> > > David Winsemius, MD > West Hartford, CT >
That was copied from the help page the comes up with: ?"$" It is rather "special". -- David. On Apr 29, 2010, at 12:26 PM, Bunny, lautloscrew.com wrote:> Nice, thx. Which manual do you use ? an introduction to R ? Or > something special ? > > matt > > > On 29.04.2010, at 15:25, David Winsemius wrote: > >> >> On Apr 29, 2010, at 9:03 AM, Bunny, lautloscrew.com wrote: >> >>> Sorry for that offlist post, did not mean to do it intentionally. >>> just hit the wrong button. Unfortunately this disadvantage is not >>> written next to $ in the manual. >> >> Hmmm. Not my manual: >> >> "Both [[ and $ select a single element of the list. The main >> difference is that $ does not allow computed indices, whereas >> [[does." >> >> >> It also says that the correct equivalent using extraction operators >> of "$" would be: >> >> x$name == x[["name", exact = FALSE]] >> -- >> David. >>> >>> >>>> >>>> On Apr 29, 2010, at 2:34 AM, Bunny, lautloscrew.com wrote: >>>> >>>>> David, >>>>> >>>>> With your help i finally got it. THX! >>>>> sorry for handing out some ugly names. >>>>> Reason being: it?s a german dataset with german variable names. >>>>> With those german names you are always sure you dont use a >>>>> forbidden >>>>> name. I just did not want to hit one of those by accident when >>>>> changing these names for the mailing list. columna is just the >>>>> latin term for column :) . Anyway here?s what worked >>>>> >>>>> note: I just tried to use some more "real" names here. >>>>> >>>>> recode_items = function(dataframe,question_number,medium=3){ >>>>> >>>>> #note column names of the initial data.frame are like >>>>> Question1,Question2 etc. Using [,1] would not be very practical >>>>> since # the df contains some other data too. Indexing by names >>>>> seemed to most comfortable way so far. >>>>> question<-paste("Question",question_number,sep="") >>>>> # needed indexing here that understands characters, that?s why >>>>> going with [,question_number] did not work. >>>>> dataframe[question][dataframe[question]==3]=0 >>>> >>>> This would be more typical: >>>> >>>> dataframe[dataframe[question]==3, question] <- 0 >>>> >>>>> >>>>> >>>>> return(dataframe) >>>>> >>>>> } >>>>> >>>>> recode_items(mydataframe,question_number,3) >>>>> # this call uses the dataframe that contains the answers of >>>>> survey participants. Question number is an argument that selects >>>>> the question from the dataframe that should be recoded. In >>>>> surveys some weighting schemes only respect extreme answers, >>>>> which is why the medium answer is recoded to zero. Since it >>>>> depends on the item scale what medium actually is, I need it to >>>>> be an argument of my function. >>>>> >>>>>> Did you want a further logical test with that "=1" or some sort >>>>>> of assignment??? >>>>> >>>>> So yes, it?s an assignment. >>>>> >>>>>>> Moral: Generally better to use "[" indexing. >>>>> >>>>> That?s what really made my day (and it?s only 9.30 a.m. here ) . >>>>> Are there exceptions to rule? >>>> >>>> Not that I know of. >>>> >>>>> I just worked a lot with the $ in the past. >>>> >>>> "$colname" is just syntactic sugar for either "["colname"]" or >>>> "[ ,"colname"]" and it has the disadvantage that colname is not >>>> evaluated. >>>> >>>> >>>>> >>>>> thx >>>>> >>>>> matt >>>>> >>>>> >>>>> >>>>> >>>>> On 29.04.2010, at 00:56, David Winsemius wrote: >>>>> >>>>>> >>>>>> On Apr 28, 2010, at 5:45 PM, David Winsemius wrote: >>>>>> >>>>>>> >>>>>>> On Apr 28, 2010, at 5:31 PM, Bunny, lautloscrew.com wrote: >>>>>>> >>>>>>>> Dear all, >>>>>>>> >>>>>>>> i have a problem with processing dataframes within a function >>>>>>>> using the "$". >>>>>>>> Here?s my code: >>>>>>>> >>>>>>>> >>>>>>>> recode_items = function(dataframe,number,medium=2){ >>>>>>>> >>>>>>>> # this works >>>>>>>> q<-paste("columna",number,sep="") >>>>>>> >>>>>>> Do your really want q to equal "columna2" when "number" equals >>>>>>> 2? >>>>>>> >>>>>>>> >>>>>>>> # this does not work, particularly because "dataframe" is >>>>>>>> not processed >>>>>>>> # dataframe should be: givenframe$columnagivennumber >>>>>>>> a=dataframe$q[dataframe$q==medium]=1 >>>>>> >>>>>> Did you want a further logical test with that "=1" or some sort >>>>>> of assignment??? >>>>>> >>>>>>> >>>>>>> a) Do you want to work on the column from dataframe ( horrible >>>>>>> name for this purpose IMO) with the name "columna2"? If so, >>>>>>> then start with >>>>>>> >>>>>>> dataframe[ , q ] >>>>>>> >>>>>>> .... the "q" will be evaluated in this form whereas it would >>>>>>> not when used with "$". >>>>>>> >>>>>>> b) (A guess in absence of explanation of a goal.) Now do you >>>>>>> want all of the rows where that vector equals "medium"? If >>>>>>> so ,then try this: >>>>>>> >>>>>>> dataframe[ dataframe[ , q ]==2 , ] # untested in the absence >>>>>>> of data >>>>>> >>>>>> Ooops. should have been: >>>>>> >>>>>> dataframe[ dataframe[ , q ]==medium , ] #since both q and >>>>>> medium will be evaluated. >>>>>> >>>>>> >>>>>>> >>>>>>> Moral: Generally better to use "[" indexing. >>>>>>> >>>>>>> -- >>>>>>> David. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> return(a) >>>>>>>> >>>>>>>> } >>>>>>>> >>>>>>>> >>>>>>>> If I call this function, i?d like it to return my >>>>>>>> dataframe. The problem appears to be somewhere around the $. >>>>>>>> I?m sure this not too hard, but somehow i am stuck. I?ll keep >>>>>>>> searchin the manuals. >>>>>>>> Thx for any help in advance. >>>>>>>> >>>>>>>> best >>>>>>>> >>>>>>>> matt >>>>>>>> [[alternative HTML version deleted]] >>>>>>>> >>>>>>>> ______________________________________________ >>>>>>>> R-help at 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 at 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. >>>>>> >>>>> >>>> >>> >> >> David Winsemius, MD >> West Hartford, CT >> >David Winsemius, MD West Hartford, CT
lol. you?re right, the " " is special. On 29.04.2010, at 18:34, David Winsemius wrote:> That was copied from the help page the comes up with: > > ?"$" > > It is rather "special". > > -- David. > > On Apr 29, 2010, at 12:26 PM, Bunny, lautloscrew.com wrote: > >> Nice, thx. Which manual do you use ? an introduction to R ? Or something special ? >> >> matt >> >> >> On 29.04.2010, at 15:25, David Winsemius wrote: >> >>> >>> On Apr 29, 2010, at 9:03 AM, Bunny, lautloscrew.com wrote: >>> >>>> Sorry for that offlist post, did not mean to do it intentionally. just hit the wrong button. Unfortunately this disadvantage is not written next to $ in the manual. >>> >>> Hmmm. Not my manual: >>> >>> "Both [[ and $ select a single element of the list. The main difference is that $ does not allow computed indices, whereas [[does." >>> >>> >>> It also says that the correct equivalent using extraction operators of "$" would be: >>> >>> x$name == x[["name", exact = FALSE]] >>> -- >>> David. >>>> >>>> >>>>> >>>>> On Apr 29, 2010, at 2:34 AM, Bunny, lautloscrew.com wrote: >>>>> >>>>>> David, >>>>>> >>>>>> With your help i finally got it. THX! >>>>>> sorry for handing out some ugly names. >>>>>> Reason being: it?s a german dataset with german variable names. With those german names you are always sure you dont use a forbidden >>>>>> name. I just did not want to hit one of those by accident when changing these names for the mailing list. columna is just the latin term for column :) . Anyway here?s what worked >>>>>> >>>>>> note: I just tried to use some more "real" names here. >>>>>> >>>>>> recode_items = function(dataframe,question_number,medium=3){ >>>>>> >>>>>> #note column names of the initial data.frame are like Question1,Question2 etc. Using [,1] would not be very practical since # the df contains some other data too. Indexing by names seemed to most comfortable way so far. >>>>>> question<-paste("Question",question_number,sep="") >>>>>> # needed indexing here that understands characters, that?s why going with [,question_number] did not work. >>>>>> dataframe[question][dataframe[question]==3]=0 >>>>> >>>>> This would be more typical: >>>>> >>>>> dataframe[dataframe[question]==3, question] <- 0 >>>>> >>>>>> >>>>>> >>>>>> return(dataframe) >>>>>> >>>>>> } >>>>>> >>>>>> recode_items(mydataframe,question_number,3) >>>>>> # this call uses the dataframe that contains the answers of survey participants. Question number is an argument that selects the question from the dataframe that should be recoded. In surveys some weighting schemes only respect extreme answers, which is why the medium answer is recoded to zero. Since it depends on the item scale what medium actually is, I need it to be an argument of my function. >>>>>> >>>>>>> Did you want a further logical test with that "=1" or some sort of assignment??? >>>>>> >>>>>> So yes, it?s an assignment. >>>>>> >>>>>>>> Moral: Generally better to use "[" indexing. >>>>>> >>>>>> That?s what really made my day (and it?s only 9.30 a.m. here ) . Are there exceptions to rule? >>>>> >>>>> Not that I know of. >>>>> >>>>>> I just worked a lot with the $ in the past. >>>>> >>>>> "$colname" is just syntactic sugar for either "["colname"]" or "[ ,"colname"]" and it has the disadvantage that colname is not evaluated. >>>>> >>>>> >>>>>> >>>>>> thx >>>>>> >>>>>> matt >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On 29.04.2010, at 00:56, David Winsemius wrote: >>>>>> >>>>>>> >>>>>>> On Apr 28, 2010, at 5:45 PM, David Winsemius wrote: >>>>>>> >>>>>>>> >>>>>>>> On Apr 28, 2010, at 5:31 PM, Bunny, lautloscrew.com wrote: >>>>>>>> >>>>>>>>> Dear all, >>>>>>>>> >>>>>>>>> i have a problem with processing dataframes within a function using the "$". >>>>>>>>> Here?s my code: >>>>>>>>> >>>>>>>>> >>>>>>>>> recode_items = function(dataframe,number,medium=2){ >>>>>>>>> >>>>>>>>> # this works >>>>>>>>> q<-paste("columna",number,sep="") >>>>>>>> >>>>>>>> Do your really want q to equal "columna2" when "number" equals 2? >>>>>>>> >>>>>>>>> >>>>>>>>> # this does not work, particularly because "dataframe" is not processed >>>>>>>>> # dataframe should be: givenframe$columnagivennumber >>>>>>>>> a=dataframe$q[dataframe$q==medium]=1 >>>>>>> >>>>>>> Did you want a further logical test with that "=1" or some sort of assignment??? >>>>>>> >>>>>>>> >>>>>>>> a) Do you want to work on the column from dataframe ( horrible name for this purpose IMO) with the name "columna2"? If so, then start with >>>>>>>> >>>>>>>> dataframe[ , q ] >>>>>>>> >>>>>>>> .... the "q" will be evaluated in this form whereas it would not when used with "$". >>>>>>>> >>>>>>>> b) (A guess in absence of explanation of a goal.) Now do you want all of the rows where that vector equals "medium"? If so ,then try this: >>>>>>>> >>>>>>>> dataframe[ dataframe[ , q ]==2 , ] # untested in the absence of data >>>>>>> >>>>>>> Ooops. should have been: >>>>>>> >>>>>>> dataframe[ dataframe[ , q ]==medium , ] #since both q and medium will be evaluated. >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> Moral: Generally better to use "[" indexing. >>>>>>>> >>>>>>>> -- >>>>>>>> David. >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> return(a) >>>>>>>>> >>>>>>>>> } >>>>>>>>> >>>>>>>>> >>>>>>>>> If I call this function, i?d like it to return my dataframe. The problem appears to be somewhere around the $. I?m sure this not too hard, but somehow i am stuck. I?ll keep searchin the manuals. >>>>>>>>> Thx for any help in advance. >>>>>>>>> >>>>>>>>> best >>>>>>>>> >>>>>>>>> matt >>>>>>>>> [[alternative HTML version deleted]] >>>>>>>>> >>>>>>>>> ______________________________________________ >>>>>>>>> R-help at 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 at 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. >>>>>>> >>>>>> >>>>> >>>> >>> >>> David Winsemius, MD >>> West Hartford, CT >>> >> > > David Winsemius, MD > West Hartford, CT >