Best I know, they are effectively the same** within R but I prefer "[" for a
couple of reasons.

1) "[" works for all data types, while $ is sometimes picky: e.g.,

x = matrix(rnorm(9),3); colnames(x) <- c("a","b","c")
x.df = as.data.frame(x)
x$a gives "Error in x$a : $ operator is invalid for atomic vectors"

while

x.df$a works as desired.

2) You can do computations inside of [] that you can't with $: this is a
little contrived, but consider

x.n = names(x.df)
for (i in 1:3)  {
     print(x.df[x.n[i]])
}

works as expected while

x.n = names(x.df)
for (i in 1:3)  {
     print(x.df$(x.n[i]))
}

does not.

3) "[" gives you access to the super-useful "drop" option.

For more info see ? "["

In short, "[" is more flexible and powerful (at least in my experience)
while $ saves the occasional keystroke here and there.

Michael Weylandt

** Caveat that you probably don't need at this point in the learning curve:
the documentation says $ is actually closer to "[[" which can be subtly
different than "[". See ?"[" for the differences.

On Wed, Aug 3, 2011 at 11:43 AM, Justin <jto...@gmail.com> wrote:

> zcatav <zcatav <at> gmail.com> writes:
>
> >
> > Your suggestion works perfect as i pointed previous message. Now have
> another
> > question about data editing. I try this code:
> > X[X[,"c"]==1,"b"]<-X[,"d"]
> > and results with error: `[<-.data.frame`(`*tmp*`, X[, "c"] == 1, "b",
> value
> > = c(NA,  :
> >   replacement has 9 rows, data has 2
> >
>
> is this equivalent and/or preferred to:
>
> X$b[X$c==1]<-X$d[X$c==1] ??
>
> I assume this goes back to the various indexing methods for a dataframe, an
> object vector that is a column of a data frame vs. an object data frame
> that
> happens to be one column of a larger data frame.
>
> on a very large data set is one preferable for speed?  one for memory use?
>
> I tend to index using $ operators often and if I should quit let me know!!
>
>
> Thanks,
>
> Justin
>
> > Logically i selected 2 rows with X[,"c"]==1. Than i want to replace in
> that
> > rows its own data from "d" to "b" with X[,"b"]<-X[,"d"]. What is wrong?
> >
> > --
> > View this message in context:
>
> http://r.789695.n4.nabble.com/conditional-data-replace-recode-change-or-whatsoever-tp3714715p3715218.html
> > Sent from the R help mailing list archive at Nabble.com.
> >
> >
>
> ______________________________________________
> 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.
>

        [[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.

Reply via email to