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

 

Salman Rushdie stabbing suspect charged with attempted murder (13 Aug 2022)

 

Who is Salman Rushdie? The writer who emerged from hiding (13 Aug 2022)

 

Ukraine says it has taken out vital bridge in occupied Kherson (13 Aug 2022)

 

Taliban break up rare protest by Afghan women in Kabul (13 Aug 2022)

 

Medusa festival: High speeds winds cut Spanish festival short (13 Aug 2022)

 

Climate activists fill golf holes with cement after water ban exemption (13 Aug 2022)

 

Trump search warrant: FBI took top secret files from Mar-a-Lago (13 Aug 2022)

 

Climate change: Drought highlights dangers for electricity supplies (13 Aug 2022)

 

Southern Baptist abuse claims under DoJ investigation (13 Aug 2022)

 

Kenya elections 2022: Raila Odinga and William Ruto in tight presidential race (13 Aug 2022)

more »

 

SF Gate

 

These were the highest-paying Silicon Valley tech companies in 2021 (19 Jul 2022)

 

'This will be somewhat painful': Elon Musk talks Twitter takeover in extended interview at TED2022 Vancouver (14 Apr 2022)

 

Best Background Check Services in 2022, Top 13 People Finder Sites Reviewed (5 Apr 2022)

 

Better.com employees got severance checks before they were laid off (9 Mar 2022)

 

Apple joins other Bay Area tech giants in responding to Russian invasion of Ukraine (1 Mar 2022)

 

Uber will now show you how you’re rated by drivers (18 Feb 2022)

more »


Site feed Updated: 2022-Aug-13 15:00