Analytics industry in India is dominated by SAS currently. But, it will be too optimistic to hope that this remains to in years to come. R, on the other hand is open source, and can be implemented in any environment. SAS grows by efforts of smart people employed by SAS but R grows by the effort of anyone who works on the language. Anyone can contribute to the language R. Hence, I feel that every analyst should develop expertise in both the languages.
There are some key differences in coding on R vs. coding on SAS. This makes some of the interview questions on R tricky and handling them becomes overwhelming for some candidates. I strongly feel a need of a common thread which has all the tricky R questions asked in interviews. This article will give a kick-start to such a thread. We have a similar series of articles published on SAS (Part 1 and Part 2). Please note that the content of this article is based on the information I gathered from various R sources.
You have two vector defined as follows :
What is the value of the vector d, which is defined as follows :
Answer : 2 , 6 , 4
R language does vectorized operations. ‘a’ and ‘b’ are two vectors with different length. By process, R multiplies the first element of a with 1st element of b, than second element of a with that of b, and so on. But in this case, after the second multiplication R hits the end of vector “b”. In such cases R, starts with the first element of smaller vector till each element of longer vector is exhausted. The vectorized operation always leads to a vector of length equal to that of longer vector.
You need to understand the following code and answer a question based on this understanding.
What is the value of f(6)?
Answer : 22
If you answered anything other than 22, you probably need to refresh the lexical scoping in R. The function f(x) returns a value y^2 + g(x). y in this environment has been defined as 2 and g(x) from inside this function. The value of x is passed of function g as 6. Now comes the catch, what is the value of free variable y here? Unlike dynamic environment where the value is assumed from the parent environment, lexical scoping assumes the value of a variable from the environment where the function is defined. The function g(x) is defined in the global environment here, and hence the value of y is assumed to be 3. Therefore a value of 18 is returned from the function g(x). f(6) is finally returning as 22.
You have been assigned to check two race tracks. To complete this task you are expected to find the means of the total time taken by cars to cross the track. In the following data assignment, “b” is the vector of total time taken by different cars and “a” is the vector of track on which this time is taken. The first element of the vector “b” corresponds to the first element of vector “a” (and so on).
How do you find the mean time of each track using split function?
Answer : Code is as follows
Following is the output of the last section :
How do you modify the code, to treat the missing value in the second track record?
Answer : The modified code is as follows :
Coders are lazy! and R language is built for coders. Codes in R are much more compact as compared to SAS. But it makes the language more difficult to retain all the syntax. You will probably need a lot of practice to get a hang of it (if you have been using SAS extensively). In one of our coming articles, we will compare coding in SAS and R. Have you faced any other R problem in analytics interview? Are you facing any specific problem with R codes? Do you think this provides a solution to any problem you face? Do you think there are other methods to solve the problems discussed in a more optimized way? Do let us know your thoughts in the comments below.