Thanks Davis. But actually, the line is legitimate:

   if (inherits(wt,what="character")) wt<-data[,wt]
because, coming down with wt being characters, the part wt<-data[,wt] 
then picks up variables data$wt. The call
   wmean(mydata,wt="weight")

actually goes OK. I was hoping to figure out a way to fix the wmean routine some how so that I can call with
   wmean(mydata,wt=weight)

Good to know there is a better way to initialize the vector Mean and and a better list command. Thank you!
On 6/26/2015 2:39 AM, David Winsemius wrote:
On Jun 25, 2015, at 7:48 PM, Steven Yen wrote:

Thanks to all for the help. I have learned much about "inherit" and "class". I 
like to know about one additional option, and that is to use a calling parameter without the 
quotation marks, similar to the linear regression syntax:

lm(data=mydata,weights=wt)

Below is a simple set of codes to calculate weighted means with generated data in data 
frame "mydata". As annotated below, I like the following call to work (without 
the quotations):

wmean(mydata,wt=weight)
Let's start with the call. If you are to execute this,  then names `mydata` and 
`weight` each must have a value.

Thank you!
----

mydata<-matrix(1:20,ncol=2)
OK. There is a value having been assigned to `mydata`

mydata<-cbind(mydata,runif(10,0,1))
And now augmented.

colnames(mydata)<-c("y","x","weight")
And a names attribute added for its columns.

mydata<-as.data.frame(mydata)

wmean <- function(data,wt){
  if (inherits(wt,what="character")) wt<-data[,wt]
  wt<-wt/mean(wt)
Here's the problem. If `wt` was of mode "character", then you cannot divide it 
by a number, since the RHS will be evaluated first. You really should read the error 
messages!

Perhaps you meant:

wt <-  data[, wt]/mean(data[ , wt]

But if you did, then it's rather confusing (but possible) to assign the value 
to the same name as the column of the matrix.


  Mean<-NULL
Why do that? If you remove it from the workspace then you cannot assign a value 
using indexed assignment as you apparently intend to do. Should have been

Mean <- numeric( ncol(data) )


  for (i in 1:ncol(data)){
    Mean[i] <- sum(data[,i]*wt)/sum(wt)
There is a bit of a confusion here. `wt` started out as a character value. I 
guess you could do this.

  }
  list("Mean: ",Mean)
Wrong syntax for lists. Suspect you want        

    list(Mean=Mean)


}
wmean(mydata,wt="weight") # This works
wmean(mydata,wt=weight)   # <= Like this to work
So were you planning to execute this first?

weight="weight" #?

--
Steven Yen
My e-mail alert:
https://youtu.be/9UwEAruhyhY?list=PLpwR3gb9OGHP1BzgVuO9iIDdogVOijCtO

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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