tungwaiyip.info

home

about me

links

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

 

Turkey to suspend Syria offensive, Mike Pence announces (17 Oct 2019)

 

Brexit: Johnson 'very confident' MPs will back deal (17 Oct 2019)

 

What just happened with Brexit? (17 Oct 2019)

 

National Doral Miami: Trump Florida golf course to host G7 summit (17 Oct 2019)

 

Trump and Pelosi: The 'meltdown' photo showing Washington divides (17 Oct 2019)

 

Climate protesters dragged from London train (17 Oct 2019)

 

Holocaust trial: Former Stutthof guard on trial in Germany (17 Oct 2019)

 

Russians accused of extremism cut wrists in court (17 Oct 2019)

 

US envoy Gordon Sondland 'disappointed' at Trump over Ukraine (17 Oct 2019)

 

Venezuela wins seat on UN Human Rights Council (17 Oct 2019)

more »

 

SF Gate

 

Europe’s antitrust regulator hits Broadcom (16 Oct 2019)

 

Chinese snooping tech spreads to nations vulnerable to abuse (16 Oct 2019)

 

GM and UAW reach tentative contract agreement (16 Oct 2019)

 

Ship traffic, October 17 (16 Oct 2019)

 

Ship traffic, October 16 (15 Oct 2019)

 

Yahoo might owe you money for those big data breaches. Here's how to get it. (15 Oct 2019)

more »


Site feed Updated: 2019-Oct-17 12:00