tungwaiyip.info

home

about me

links

Media

Yucatán Photos

St Lucia Photos

Photo Album

Videos

Blog

< October 2012 >
SuMoTuWeThFrSa
  1 2 3 4 5 6
7 8 910111213
14151617181920
21222324252627
28293031   

past articles »

Click for San Francisco, California Forecast

San Francisco, USA

 

Learning R and Octave/Matlab

I am engaged in the hazardous activity of learning R and Octave/Matlab at the same time. I am fairly new to both language and I am trying hard to not to confuse one with the other.

The story is I have signed up 3 Coursera online courses at the same time, a seemingly suicidal exercise. The first one Probabilistic Graphical Models, the most difficult Coursera course I've encountered by far. PGM uses Octave so I have to learn from scratch. The next course is Computing for Data Analysis. This is basically a very long R tutorial and programming exercise. It should be fairly easy for programmers. I hope I can use this opportunity to get familiar with R. And it only last 4 weeks. Since the R course looks very manageable I pick up the third course Mathematical Biostatistics Boot Camp. I dismissed it at the beginning because I think I have nothing to do bio-something. Turns out you can drop the bio- prefix and it is just a statistics course. I'm already doing independent study on probability and statistics to reinforce my basis to tackle the PGM course. Since this course cover roughly the same ground I might as well follow along. Interesting both the R and biostatistics course as well as another data analysis course offered next year are from John Hopkins University from the medical domain.

Here is my first impression on R and Octave from the point of view of a programming. Both of them are from an lineage of math and science computing separate from general purpose programming language. So the syntax can be weird. For example R use the character $ when we would use . in other object oriented language. Like R uses "a$b" that simply means "a.b". Instead "." seems to have no special meaning in R and is just a part of the identifier.

The biggest feature of them over other high level languages is the support of high level data type like vector, matrix and data frame. Octave has literal to construct matrix easily. You can also access the subset and elements of the matrix using powerful indexing functions and syntax. These high level data structure introduce a whole new set of capabilities like slicing, projection, grouping and vectorized functions, etc.

The downside is they are not necessary good general purpose language. It may frustrate you to find things you can do easily in regular language now requires new learning and a lot of trial and error. There are a lot of idiosyncrasies in the language that you have to understand. And frankly if the language is better designed there would be less of these issues to deal with.

R is especially laden with convenient shortcuts that is not well designed. I think of it as PHP of data analysis language. It is created to address practical need without too much concern of good programming language design. For example there is a family of function `x-apply` that maps a function to a list. `lapply` is similar to map() in Python. `sapply` is same as `lapply` but it simplify the result by turning list of 1 element items into just a vector. `tapply` is a more powerful variation of `lapply`. It could benefit from some result simplification too. But instead of having a `stapply` function, you can use a simplified=True argument to `tapply` to achieve the same result. How about having a separate `simplify` function that you can use on both x-apply function so that you don't have an explosion of options and alternatives? R seems to have a culture to provide convenient functions and apply coercion to make things work, but result in irregular and non-transparent magical operations.

Finally after struggle a lot on the Octave exercise just to get basic things works, I designed to re-implement the solution in Python and numpy, an environment that I'm more familiar with. I think I can learn more by focusing on the task rather than learning the rope of a new language. Although numpy have many of the same capability of Octave and R, this exercise makes me aware of the intrinsic value they provides. Numpy is a library build on top of Python. As such it has no literal to build vector and matrix, which are native data type in Octave. You have to use numpy.ndarray to build matrix. The [] builds regular Python list.

These are some of my observation in week 1. There are about 10 more weeks to go.

2012.10.02 comments

 

 

blog comments powered by Disqus

past articles »

 

BBC News

 

Russia 'tried to hijack US election', says US senator (30 Mar 2017)

 

Brexit: UK sets out plans to replace all EU laws (30 Mar 2017)

 

Kim Jong-nam's body to be released to North Korea (30 Mar 2017)

 

Ronaldo statue: Sculptor Emanuel Santos defends his bizarre work (30 Mar 2017)

 

Campaigners seek 'to sell US politicians' browsing data' (30 Mar 2017)

 

US Kabul embassy fires staff over drugs (30 Mar 2017)

 

US hails Turkey as 'a trusted ally' in Ankara talks (30 Mar 2017)

 

Insurer Lloyd's of London confirms new Brussels subsidiary (30 Mar 2017)

 

American Airlines pilot dies on Dallas-Albuquerque flight (30 Mar 2017)

 

Italian police in Venice arrest three Jihadists (30 Mar 2017)

more »

 

SF Gate

 

Bay Area News (7 Jan 2012)

 

City Insider (11 Feb 2012)

 

Crime Scene (13 Feb 2012)

 

C.W Newius Column (10 Jan 2012)

 

C.W. Nevius Blog (11 Feb 2012)

 

Education News (10 Jan 2012)

 

KALW (11 Feb 2012)

 

Matier and Ross Blog (11 Feb 2012)

 

Pizza by robot, Apple’s brand less hot, and BuzzFeed’s IPO shot (30 Mar 2017)

 

App store sales for Android to overtake Apple’s iOS, report says (30 Mar 2017)

 

Business News Roundup, March 30 (29 Mar 2017)

 

Bill to let bars serve alcohol until 4 a.m. advances (29 Mar 2017)

 

Man sentenced in iPhone frauds (29 Mar 2017)

 

PG&E agrees to .5m penalty in San Bruno fallout; bills to drop (29 Mar 2017)

more »

 


Site feed Updated: 2017-Mar-30 09:00