Monday, June 6, 2011

10 R One Liners to Impress Your Friends

Following the trend of one liners for various languages (Haskell, Scala, Python), here's some examples in R

Multiply Each Item in a List by 2
#lists
lapply(list(1:4),function(n){n*2})
# otherwise
(1:4)*2
 

Sum a List of Numbers
#lists
lapply(list(1:4),sum)

# otherwise
sum(unlist(list(1:4))) # or simply
sum(1:4)
 
Verify if Exists in a String
wordlist = c("lambda", "data", "plot", "statistics", "R")
tweet = c("R is an integrated suite of software facilities for data manipulation, calculation and graphical display")
wordlist[wordlist %in% (c(unlist(strsplit(tweet,' ', fixed=T))))]
 


Read in a File
readLines("data.file", n=-1)
 

Happy Birthday to You!
lapply((1:4),function(x){ paste(c("Happy Birthday to ", ifelse(x!=3, "you", "dear Name")), sep="", collapse="")})
 


Filter list of numbers
n = c(49, 58, 76, 82, 88, 90); c(list(n[which(n<=60)]),list(n[which(n>60)]))
 
Fetch and Parse an XML web service
library('XML'); xmlParseDoc('http://search.twitter.com/search.atom?&q=R-Project', asText=F)
 

Find minimum (or maximum) in a List
# for lists
lapply(list(c(14, 35, -7, 46, 98)), min, classes="numeric", how="replace")

# otherwise
min(unlist(list(14, 35, -7, 46, 98)))
# or simply
min(c(14, 35, -7, 46, 98))
max(c(14, 35, -7, 46, 98))
 

Parallel Processing
# http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf
# copy from Section 4 An example doSMP session
library(doSMP); w <- startWorkers(workerCount = 4); registerDoSMP(w); foreach(i = 1:3) %dopar% sqrt(i)
 

Sieve of Eratosthenes
##ok, this one is a little cheating
library('spuRs'); primesieve(c(),2:50)
 

Wednesday, March 9, 2011

Ascii code table in R

A quick method to enumerate the printable ascii characters with their hex & decimal values.

The following code relies on taking the "raw" value of a base 10 int (this gives a hex value), and then using the builtin function rawToChar, which gives a character. You can of course change the range (up to 255). Not sure and haven't tested, but for UTF-8, may need ?Encoding (such as enc2utf8(x))

To use as a function that can accept an ascii character and return the decimal value, something like this:
asc <- function(x) { strtoi(charToRaw(x),16L) }

asc("a")
[1] 97
 
To use as a function to return the ascii character given it's decimal code value, try something like this:
chr <- function(n) { rawToChar(as.raw(n)) }

chr(asc("a")) # 97
[1] "a"
 
To print the ascii table (for 32:126), try something like this:
coderange = c(32:126)
asciitable_printable = data.frame(
 coderange,
 as.raw(coderange),
 row.names=rawToChar(as.raw(coderange),multiple=TRUE)
)

colnames(asciitable_printable) <- c("dec","hex")
asciitable_printable
 
Results
    dec hex
    32  20
!   33  21
"   34  22
#   35  23
$   36  24
%   37  25
&   38  26
'   39  27
(   40  28
)   41  29
*   42  2a
+   43  2b
,   44  2c
-   45  2d
.   46  2e
/   47  2f
0   48  30
1   49  31
2   50  32
3   51  33
4   52  34
5   53  35
6   54  36
7   55  37
8   56  38
9   57  39
:   58  3a
;   59  3b
<   60  3c
=   61  3d
>   62  3e
?   63  3f
@   64  40
A   65  41
B   66  42
C   67  43
D   68  44
E   69  45
F   70  46
G   71  47
H   72  48
I   73  49
J   74  4a
K   75  4b
L   76  4c
M   77  4d
N   78  4e
O   79  4f
P   80  50
Q   81  51
R   82  52
S   83  53
T   84  54
U   85  55
V   86  56
W   87  57
X   88  58
Y   89  59
Z   90  5a
[   91  5b
\\  92  5c
]   93  5d
^   94  5e
_   95  5f
`   96  60
a   97  61
b   98  62
c   99  63
d  100  64
e  101  65
f  102  66
g  103  67
h  104  68
i  105  69
j  106  6a
k  107  6b
l  108  6c
m  109  6d
n  110  6e
o  111  6f
p  112  70
q  113  71
r  114  72
s  115  73
t  116  74
u  117  75
v  118  76
w  119  77
x  120  78
y  121  79
z  122  7a
{  123  7b
|  124  7c
}  125  7d
~  126  7e
 

Monday, January 10, 2011

EmEditor R code macro - Almost interactive R development for Emeditor

Get the new macro now hosted on github


Edit 18th Jan 2011: The below text refers to the old version of the macro and is no longer relevant, a new post will  describe the new macro, and it is also documented on the github site.


As a follow up to the earlier post regarding Emeditor Professional as an editor for R development, I have updated the script based on user feedback. The script now sends selected text or the whole (if no text selected) file to a running RGui Console if set to, otherwise as per previous iteration, will send it to rterm.

So, there are now 2 ways to run the macro, based on setting the value for a variable called "
useSource" - the default is "true", which means any selected text (or file) will be sent to an already running instance of RGui; If useSource is set to "false", the macro will operate the "old" way, by invoking rterm each time.

This has a number of benefits over invoking rterm each time:
  • Keeps the same workspace loaded - No need to keep repeating tasks, such as loading libraries, performing lengthy calculations etc, if you only changed some other part of the code;
  • Plots now display;
  • You can see what has executed.
The macro relies on the R command "source", as sending text via sendkeys is unreliable. By default, the macro has echo=TRUE,keep.source=TRUE set. For further information on the source command, in R, run "help(source)".

Note
that when useSource=true, all R output is only shown in R, only errors with emeditor/macro will show in the Emeditor output window.

More features planned for the future:

  • Auto launch RGui if useSource=true but no rgui running;
  • Be closer in features to the vim r plugin; and
  • Move the macro code to github
  • Maybe create an actual emeditor plugin and run R in a hidden shell for more integration.
Get the new macro now hosted on github
As always, any issues please leave a comment, or log an issue