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.

Reply via email to