We provide effective and economically affordable training courses for R and Python, click here for more details and course registration !

with() function in R provides an alternative and often easier way to deal with data management and analysis. Say we have a data frame ‘grade’, and want to calculate the summary statistics of variable ‘Math’ and correlation between variables ‘Math’ and ‘Physics’. In the normal way, we can write the code as follows:

#to show first three observations in data frame 'grade'
head(grade,3)
  StudentID        Fullname Race Gender Country Age Math Physics
1         1     James Zhang    A   Male      US  23   73      70
2         2       Wilson Li    E Female      UK  26   95      76
3         3 Richard Nuan Ye    A   Male      UK  35   77      83
  Chemistry       Date
1        87 10/31/2008
2        83  3/16/2008
3        92  5/22/2008

#summary statistics of variable 'Math' of data frame 'grade'
#output
summary(grade$Math)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   60.0    72.5    79.0    78.9    87.0    95.0 

#correlation between variables Math and Physics of data frame grade
cor(grade$Math,grade$Physics)
#output
[1] -0.04852046

If there are only two lines of code like this, it is OK. But say if we have 5 or 10 of lines of codes for correlations and summary statistics for different variables in the same data frame, using with() can save most of the repeated work.

#Using with() to conduct same job as above
with(grade, {
  print(summary(Math))
  print(cor(Math, Physics))
})
#output
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   60.0    72.5    79.0    78.9    87.0    95.0 
[1] -0.04852046

Similar as R function, the variable defined inside a with() block exists only in the block. If we refer to this variable outside of the with() block, an error will be incurred.

#local variable assignments exist only within the function brackets
with(grade, {
   test <- summary(Math)
   test
 })
#output
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   60.0    72.5    79.0    78.9    87.0    95.0 
#Does not work if we refer to a local object outside of the with block
test
#output
Error: object 'test' not found

One way to bypass this restriction is using double-arrow assignment symbol in the with() block.

#using double-arrow assignment symbol inside with() block
with(grade, {
   print(summary(Math))
   print(cor(Math,Physics))
   test<<- summary(Math)
+ })
#output
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   60.0    72.5    79.0    78.9    87.0    95.0 
[1] -0.04852046
#refer to object outside with() block
test
#output
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   60.0    72.5    79.0    78.9    87.0    95.0 

You can also watch R tutorial videos on our YouTube channel.


0 Comments

Leave a Reply

Avatar placeholder