As far as I know the answer to your question is "No", but there are things you 
can do to improve the readability of your code.  One thing I find useful is to 
avoid using "$" as much as possible and to favour things like with() and 
within().

The first thing you might do is think about choosing shorter names, of course.  
If that's not possible, you could try something like this.

ensureNN <- function(x) {  # "ensure non-negative"
        is.na(x[x < 0]) <- TRUE
        x
} 

some.data.frame <- within(some.data.frame, {
  some.long.variable.name <- ensureNN(some.long.variable.name)
  some.other.long.variable.name <- ensureNN(some.other.long.variable.name)
})

Of course if you wanted to do this to all variables in a data frame you could do

some.data.frame <- data.frame(lapply(some.data.frame, ensureNN))

and it all happens, no questions asled.  (I can see a generic function emerging 
here, perhaps...)

W.


-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
Behalf Of Christian Raschke
Sent: Tuesday, 20 July 2010 9:16 AM
To: r-help@r-project.org
Subject: [R] Indexing by logical vectors

Dear R-Listers,

My question concerns indexing vectors by logical vectors that are based 
on the original vector. Consider the following simple example to 
hopefully make clear what I mean:

a <- rnorm(10)
a[a<0] <- NA

However, I am now working with multiple data frames that I received, 
where each of them has nicely descriptive, yet long names(). In my 
scripts there are many instances where operations similar to the one 
above are required. Again a simple example:


some.data.frame <- data.frame(some.long.variable.name=rnorm(10), 
some.other.long.variable.name=rnorm(10))

some.data.frame$some.other.long.variable.name[some.data.frame$some.other.long.variable.name
 
< 0] <- NA


The fact that the names are so long makes things not very readable in 
the script and hard to debug. Is there a way in R to refer to the "self" 
of whatever is being indexed? I am looking for something like

some.data.frame$some.other.long.variable.name[.self < 0] <- NA

that would accomplish the same result as above. Or is there another 
concise, but less messy way to do this? I prefer not attaching the 
data.frames and partial matching makes things even more messy since many 
names() are very similar. I know I could just rename everything, but I'd 
like to learn if there is and easy or obvious way to do this in R that I 
have missed so far.

I would appreciate any advice, and I apologize if this topic has been 
discussed before.


 > sessionInfo()
R version 2.11.0 (2010-04-22)
x86_64-redhat-linux-gnu

locale:
  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
  [5] LC_MONETARY=C              LC_MESSAGES=en_US.UTF-8
  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
  [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base


-- 
Christian Raschke
Department of Economics
and
ISDS Research Lab (HSRG)
Louisiana State University
cras...@lsu.edu

______________________________________________
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