Skip to content

Private data libraries (idea & trick)

3 messages · Peter Dalgaard, Kurt Hornik

#
It has been annoying me for a while that data in user areas are more
difficult to handle than those in the packages. 

Especially for beginners, it would be very handy to be able just to
say "data(mydata)", rather than
"mydata<-read.table('mydata.txt',header=T)"

What just occurred to me was that the following hack actually works:

Type

library('.',lib.loc='.')

and everything in ./data behaves as if it were in a package. 

Another interesting hack is that one can do this:

[pd@blueberry data]$ cat > file.txt
a b
1 2
3 4
[pd@blueberry data]$ cat > file.R
file<-transform(read.table('file.txt',header=T),
    b=factor(b,levels=1:4,labels=letters[1:4]))

and then from inside R, get the dataframe with factor recoding and
everything as
a b
1 1 b
2 3 d

Question: Should we perhaps clean this up a little and formalize it?
2 days later
#
Actually, this works in directories different from the current one as
well, as the working directory is changed temporarily.  However, someone
pointed out that this is not thread-safe, so we should be careful about
announcing this feature.

-k
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at> writes:
...
Yes. Actually it relies on it because file.{R,txt} would be in ./data
Er, didn't that just mean that the CWD would have to be yet another
per-thread item, or source() would have to block other threads for the
duration? Would seem a bit silly to have a chdir option and not be
allowed to use it...