Rlang.R

From Organic Design wiki

Code snipits and programs written in R, S or S-PLUS

  1. Source: http://www.bioconductor.org/workshops/2006/rforbioinformatics/labs/wed/Rlang.R
      1. chunk number 1: NULL

length(NULL)


      1. chunk number 2: NAtypes

typeof(NA) as.character(NA) as.integer(NA)


      1. chunk number 3: infandnan

y = 1/0 y -y y-y


      1. chunk number 4: types

typeof(y) mode(NA) storage.mode(letters[1:4])


      1. chunk number 5: testis

is.integer(y) is.character(y) is.double(y) is.numeric(y)


      1. chunk number 6: colon

1:3 1.3:3.2

x=11:20 x[4] x[4:5]


      1. chunk number 7: avec
x = c(1,2,3,4)
x
dim(x) = c(2,2)
x
typeof(x)
y = letters[1:10]
y
dim(y) = c(2,5)
y
typeof(y)


      1. chunk number 8: createVecs
c(1, 3:5)
c(1, "c")
numeric(2)
character(2)
seq(1, 10, by = 2)
sample(1:100, 5)


      1. chunk number 9: simpleFuns
sum(numeric())
prod(numeric())


      1. chunk number 10: numericalProb
a <- sqrt(2)
a * a == 2
a * a - 2


      1. chunk number 11: factorEx1

set.seed(123) x=sample(letters[1:5], 10, replace=TRUE) y=factor(x) y attributes(y)


      1. chunk number 12: factorEx
y=sample(letters[1:5], 20, rep=T)
v = as.factor(y)
xx=list(I=c("a","e"), II=c("b", "c", "d"))
levels(v) = xx
v


      1. chunk number 13: ordFact
z= ordered(y)
class(z)


      1. chunk number 14: listex
y = list(a=1, 17, b=4:5, c="a")
y
names(y)


      1. chunk number 15: listex2

l2 = list(mn = mean, var = var)

l3 = list(l2, y)


      1. chunk number 16: envEx
e1 = new.env(hash=TRUE)
e1$a = 10
ls(e1)
e1"a"


      1. chunk number 17: simpleFun

median


      1. chunk number 18: simpFun2

get("+")


      1. chunk number 19: add
x=1:4
x+5
myP = get("+")
myP
myP(x, 5)


      1. chunk number 20: sqbisafun
myl = list(a1 = 10, b=20, c=30)
myl[c(2,3)]
myl$a
myl["a"]
f = "b"
mylf
myl$f


      1. chunk number 21: subpos
x= 11:20
x[c(1,3,5)]


      1. chunk number 22: posind
 x= 1:10
 x[1:3]
 x[9:11]
 x[0:1]

x[c(1,2,NA)]


      1. chunk number 23: charSub

x=1:5 names(x) = letters[1:5] x[c("a", "d")]


      1. chunk number 24: logicalSubs

(letters[1:10])[c(TRUE, FALSE, NA)] (1:5)[rep(NA,6)]


      1. chunk number 25: emptySub

x=matrix(1:9,nc=3) x[,1] x[1,]


      1. chunk number 26: dropSubs

x[,1,drop=FALSE] x[1,,drop=FALSE]


      1. chunk number 27: arrayMatrixSub

x=array(1:27, dim=c(3,3,3)) y= matrix(c(1,2,3,2,2,2,3,2,1), byrow=TRUE, ncol=3) x[y]


      1. chunk number 28: posassign
x[1:3] <- 10
x


      1. chunk number 29: negassignb
x=1:10
x[-(2:4)] = 10
x


      1. chunk number 30: subassignall

x=matrix(1:10, nc=2) x[] = sort(x)


      1. chunk number 31: forloop

for(i in 1:3) print(i)

for(i in 1:5) if(i > 3 ) break i


      1. chunk number 32: ifelse
x = matrix(1:10, nc=2)
ifelse( x < 2, x, c(10, 11, 12))


      1. chunk number 33: simpleVect
x= 11:15
x + 3


      1. chunk number 34: Vect2
nchar(month.name)


      1. chunk number 35: simpRecyc
1:10 + 1:3


      1. chunk number 36: recyc2
1:3 + numeric()
x = matrix(1:10, nc=2)
x+(1:2)


      1. chunk number 37: search

search()


      1. chunk number 38: findandget

find("+") get("+")


      1. chunk number 39:

assign("+", function(e1, e2) print("howdy")) 1+10 rm("+") 1+10


      1. chunk number 40: simpleEx

library(tools)


      1. chunk number 41: printex

print("a") v = print("a") v


      1. chunk number 42: evalEx

x=expression(1:10) x eval(x) evalq(x) eval(quote(x))


      1. chunk number 43: evalEx2
e = new.env()
e$x = 10
evalq(x, envir=e)


      1. chunk number 44: usesoflocal
    gg <- local({
        k <- function(y) f(y)
        f <- function(x) if(x) x*k(x-1) else 1
    })
    gg
    ls(environment(gg))
    for (i in 1:5) print( gg(i) )


      1. chunk number 45: namespaces

loadedNamespaces() MASS::lda loadedNamespaces() search()


      1. chunk number 46: simpleEx

foo <- function() {

 y <- 10
 function(x) x+y

}

bar <- foo() bar is.function(bar) bar(3)


      1. chunk number 47: ex2
bar2 = function(x) x + z
e1 = new.env()
e1$z = 20
tryCatch(bar2(11), error=function(x) "bar2 failed")
environment(bar2) = e1
tryCatch(bar2(11), error=function(x) "bar2 failed")


      1. chunk number 48: mlfun

Rmlfun <-

 function(x) {
   sumx <- sum(x)
   n <- length(x)
   function(mu)
     n * log(mu) - mu * sumx
 }


      1. chunk number 49: mleval
efun <- Rmlfun(1:10)   # efun is a function!
efun(3)
efun2 <- Rmlfun(20:30)
efun2(3)
efun(3)                # nothing has changed for efun


      1. chunk number 50: mklike

Rmklike <-

 function(data) {
   n <- length(data)
   sumx <- sum(data)
   lfun <- function(mu) n * log(mu) - mu * sumx
   score <- function(mu) n / mu - sumx
   d2 <- function(mu) -n / mu^2
   list(lfun = lfun, score = score, d2 = d2)
 }


      1. chunk number 51: newton

newton <- function(lfun, est, tol = 1e-7, niter = 500) {

   cscore <- lfun$score(est)
   if (abs(cscore) < tol)
     return(est)
   for (i in 1:niter) {
     new <- est - cscore / lfun$d2(est)
     cscore <- lfun$score(new)
     if (abs(cscore) < tol)
       return(new)
     est <- new
   }
   stop("exceeded allowed number of iterations")
 }


      1. chunk number 52: lexEx2

e1 <- new.env() e1$a <- 10 foo <- function(x) x+a environment(foo) <- e1 foo(4)


      1. chunk number 53: lexEx2cont

e1$a <- 20 foo(4) e1"a"


      1. chunk number 54: getEx

b <- get("foo") b(23)


      1. chunk number 55: tryCatchEx

foo <- function(x) {

   if( x < 3 ) list() + x
   else {
     if(x < 10 )  warning("ouch")
     else 33
  }

}

tryCatch(foo(2), error=function(e) "an error", warning = function(e) "a warning")

tryCatch(foo(5), error=function(e) "an error", warning = function(e) "a warning")

tryCatch(foo(29))


      1. chunk number 56: filenotfound

FNFcondition <- function (message, call = NULL) {

   class <- c("fileNotFound", "error", "condition")
   structure(list(message = as.character(message), call = call),
       class = class)

}

v1 <- FNFcondition("file not found")

tryCatch( signalCondition(v1), fileNotFound = function(e) e ) tryCatch( signalCondition(v1), condition = function(e) "condition" )


      1. chunk number 57: Ex1
odd <- function(x) (x %% 2) > 0


      1. chunk number 58: Ex2

runmax <- function(x, width, na.rm=FALSE) {

   if( na.rm ) {
       na.code <- ifelse(na.rm,-1,+1)*1e347 ### recode NA as very small/large
       x[is.na(x)]<-na.code
   }
   nsub<-length(x)-width+1                  ### number of subsequence blocks
   xcol<-col(matrix(0, width, nsub))
   xord<-xsub<-xcol
   xsub[]<-x[c(xcol+row(xcol))-1]           ### one block per col
   xord[]<-order(xcol,xsub)                 ### order by block and by value within block
   xmax<-xsub[xord[width,]]                 ### pick out last of each block
   if( na.rm )
       xmax[xmax==na.code]<-NA
   xmax

}