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@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. >>> >> > ______________________________________________ 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.