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

 

Ex-FTX boss Bankman-Fried: 'I didn't try to commit fraud' (01 Dec 2022)

 

Cyril Ramaphosa: South African president faces threat of impeachment over 'Farmgate' (01 Dec 2022)

 

Christine McVie, Fleetwood Mac singer-songwriter, dies aged 79 (01 Dec 2022)

 

Lady Susan Hussey quits over remarks to charity boss Ngozi Fulani (30 Nov 2022)

 

Spectacular scenes as Hawaii volcano erupts (30 Nov 2022)

 

Danny Masterson: Jury fails to reach a verdict in rape case against That 70s Show actor (01 Dec 2022)

 

Canada: Ambassador tells EU that deforestation rules 'burdensome' (01 Dec 2022)

 

Idaho stabbings: Families deliver tributes for the four victims at vigil (01 Dec 2022)

 

San Francisco to allow police 'killer robots' (30 Nov 2022)

 

Musk says Twitter feud with Apple boss 'resolved' (01 Dec 2022)

more »

 

SF Gate

 

San Francisco food delivery giant DoorDash lays off 1,250 employees (30 Nov 2022)

 

20-year-old California student creates viral Spotify festival poster app (29 Nov 2022)

 

Elon Musk’s Twitter cuts COVID misinformation policy, guts child safety protections (29 Nov 2022)

 

Elon Musk’s Twitter is reportedly failing to pay some employees (28 Nov 2022)

 

Bay Area tech mainstay HP to lay off up to 6,000 people (26 Nov 2022)

 

Elon Musk signals his support for Ron DeSantis in 2024 on Twitter (25 Nov 2022)

more »


Site feed Updated: 2022-Nov-30 21:00