<p><div><div><div><div data-width="100" data-show-faces="false" data-send="true" data-layout="button_count" data-height="21" data-href="https://www.r-bloggers.com/running-your-r-code-on-azure-with-mrsdeploy/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="http://blog.revolutionanalytics.com/2017/03/running-your-r-code-azure.html"> Revolutions</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<div>
<div>

<div>
<p><em>by John-Mark Agosta, data scientist manager at Microsoft</em></p>
<p>Let’s say you’ve built a model in <em>R</em> that is larger than you can conveniently run locally, and you want to take advantage of Azure’s resources simply to run it on a larger machine. This blog explains how to provision and run an Azure virtual machine (VM) for this, using the <em>mrsdeploy</em> library that comes installed with Microsoft’s <em>R Server</em>. We will work specifically with the Unbuntu Linux version of the VM, so I you’ll need to be familiar with working with superuser privileges at the command line in Linux, and of course, familiar with <em>R</em>.</p>
<p>The fundamental architecture consists of your local machine as the <em>client</em> for which you create a <em>server</em> machine in the Cloud. You’ll set up a <em>service</em> on the remote machine — the one in the cloud. Once you do this, you needn’t interact directly with the remote machine; instead you issue commands to it and see the results returned at the client. This is one approach; there are many many ways this can be done in Azure, depending on your choice of language, reliance on coding, capabilities of the service, and complexity and scale of the task. A data scientist typically works first interactively to explore data on an individual machine, then puts the model thus built into production at scale, in this example, in the Cloud. The purpose of this posting is to clarify the deployment process, or as it is called, in a mouthful, <em>operationalization</em>. In short, using a VM running the <em>mrsdeploy</em> library in <em>R Server</em> lets you operationalize your code with little effort, at modest expense.</p>
<p>Alternatively, instead of setting up a service with <code>R server</code>, one unadvisedly could just provision a an bare virtual machine, and login into it as one would any remote machine with the manual encumbrance of having to work with multiple machines, load application software, and move data and code back and forth. But that’s what we avoid. <strong>The point of the Cloud is making large data and compute as much as possible like working on your local computer.</strong></p>
<div>
<h2>Deploying Microsoft R Server (MRS) on an Azure VM</h2>
<p>Azure Marketplace offers a <a target="_blank" rel="nofollow" href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps/Microsoft.MicrosoftRServer2016version901forLinuxUbuntuversion1604">Linux VM (Ubuntu version 16.04)</a> preconfigured with <em>R Server</em> 2016. Additionally the Linux VM with <em>R Server</em> comes with <a target="_blank" rel="nofollow" href="https://msdn.microsoft.com/en-us/microsoft-r/mrsdeploy/mrsdeploy">mrsdeploy</a>, a new <em>R</em> package for establishing a remote session in a console application and for publishing and managing a web service written in <em>R</em>. In order to use the <em>R Server</em>’s deployment and operationalization features, one needs to configure <em>R Server</em> for operationalization after installation, to act as a deployment server and host analytic web services.</p>
<p>Alternately there are other Azure platforms for operationalization using <em>R Server</em> in the Marketplace, with other operating systems and platforms including <em>HDInsight</em>, Microsoft’s Hadoop offering. Or, equivalently one could use the <em>Data Science VM</em> available in the Marketplace, since it has a copy of <em>R Server</em> installed. Configuration of these platforms is similar to the example covered in this posting.</p>
<ul>
<li><a target="_blank" rel="nofollow" href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps/Microsoft.MicrosoftRServer2016version901forLinuxCentOSversion72">Microsoft R Server 2016 (version 9.0.1) for Linux (CentOS version 7.2)</a></li>
<li><a target="_blank" rel="nofollow" href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps/Microsoft.RServerOnlySQLServer2016Enterprise">R Server Enterprise</a></li>
<li><a target="_blank" rel="nofollow" href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps/Microsoft.RServerForHDInsight">R Server for HDInsight</a></li>
</ul>
<p>Provisioning an <em>R Server</em> VM, as reference in the <a target="_blank" rel="nofollow" href="https://msdn.microsoft.com/en-us/microsoft-r/vm-azure-rserver-linux-9.0.1#o16n">documentation</a>, takes a few steps that are detailed here, which consist of configuring the VM and setting up the server account to authorize remote access. To set up the server you’ll use the system account you set up as a user of the Linux machine. The server account is used for client interaction with the <em>R Server</em>, and should not be confused with the Linux system account. This is a major difference with the Windows version of the <em>R Server</em> VM that uses <em>Active Directory</em> services for authentication.</p>
<div>
<h3>Provisioning a machine from the Marketplace</h3>
<p>You will want to do the install of a Unbuntu Marketplace VM with <em>R server</em> preinstalled. The best way to find it on <code>portal.azure.com</code> is to search for “r server”:</p>
</div>
</div>
</div>
</div>
<div>
<div><a target="_blank" rel="nofollow" href="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01bb0985f7f7970d-pi"><img title="R_server_ubuntu_marketplace" alt="R_server_ubuntu_marketplace" src="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01bb0985f7f7970d-320wi"></a>
<div>R Server in the Marketplace</div>
</div>
</div>
<p>Select the Ubuntu version. Do a conventional deployment—lets say you name yours <code>mymrs</code>. Take note of the <code>mymrs-ip</code> public address, and the <code>mymrs-nsg</code> network security group resources created for it since you will want to customize them.</p>
<p>Login to the VM using the system account you set up in the Portal, and add these aliases, one for the path to the version of the <em>R</em> executable, <em>MRS</em> (aka Revo64), and one for the <code>mrsdeploy</code> menu-driven administration tool.</p>
<pre><code>alias rserver='/usr/local/bin/Revo64-9.0'
alias radmin='sudo /usr/local/bin/dotnet \
/usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Utils.AdminUtil/Microsoft.DeployR.Utils.AdminUtil.dll'</code></pre>
<p>The following are a set of steps to bring up on the VM a combined web-compute server (a “one-box” server) that can be accessed remotely.</p>
<div>
<h2>1. Check if you can run Microsoft R Server (MRS).</h2>
<p>Just use the alias for MRS</p>
<pre><code>$ rserver
[Note a line in the banner saying
&quot;Loading Microsoft R Server packages, ...&quot;]</code></pre>
<p>Here’s a simple test that MRS library is pre-loaded and runs. Note the MRS libraries (“rx” functions) are preloaded.</p>
<pre><code>> rxSummary(formula = ~., data = iris)</code></pre>
</div>
<div>
<h2>2. Set up the MRS server for <code>mrsdeploy</code></h2>
<p><em>mrsdeploy</em> operationalization runs two services, the <em>web node</em> and one or more <em>compute nodes.</em> In the simplest configuration, the one described here, both “nodes” are services running on same VM. Alternately, by making these separate, larger loads can be handled with one web node and one or more compute nodes.</p>
<p>Use the alias you created for the admin tool.</p>
<pre><code>$ radmin</code></pre>
<p>This utility brings up a menu</p>
<pre><code>*************************************
Administration Utility (v9.0.1)
*************************************

1. Configure R Server for Operationalization
2. Set a local admin password
3. Stop and start services
4. Change service ports
5. Encrypt credentials
6. Run diagnostic tests
7. Evaluate capacity
8. Exit

Web node endpoint: **http://localhost:12800/**

Please enter an option:
1

Set the admin password:
*************

Confirm this password:
*************</code></pre>
<div>
<h3>Configuration for Operationalization:</h3>
<pre><code>A. One-box (web + compute nodes)
B. Web node
C. Compute node
D. Reset machine to default install state
E. Return to main menu

Please enter an option:
A

Success! Web node running (PID: 4172)

Success! Compute node running (PID: 4172)</code></pre>
<p>At this point the setup should be complete. Running diagnostics with the admin tool can check that it is.</p>
</div>
<div>
<h3>Run Diagnostic Tests: A. Test Configuration</h3>
<pre><code>Please enter an option:
6

Preparing to run diagnostics...
***********************
DIAGNOSTIC RESULTS:
***********************
Overall Health: pass

Web Node Details:
Logs: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.WebAPI/logs
Available compute nodes: 1

Compute Node Details:
Health of 'http://localhost:12805/': pass
Logs: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.BackEnd/logs


Authentication Details:
A local admin account was found. No other form of authentication is configured.

Database Details:
Health: pass
Type: sqlite</code></pre>
<p>Code Execution Test: PASS Code: ‘y &lt;- cumprod(c(1500, 1+(rnorm(n=25,mean=.05, sd = 1.4)/100)))’</p>
<p>Yes, it even tests that the <em>MRS</em> interpreter runs! If the web or the service had stopped the following test will complain loudly. Note the useful links to the log directories for failure details. Services can be stopped and started from selection <em>3</em> in the top level menu.</p>
</div>
<div>
<h3>Run Diagnostic Tests: B. Raw Server Status</h3>
<pre><code>**********************
SERVICE STATE (raw):
**********************

Please authenticate...

Username:
admin

Password:
*************
Server:
Health: pass
Details:
    logPath: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.WebAPI/logs
backends:
    Health: pass
    http://localhost:12805/:
    Health: pass
    Details:
        maxPoolSize: 80
        activeShellCount: 1
        currentPoolSize: 5
        logPath: /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.BackEnd/logs
database:
    Health: pass
    Details:
    type: sqlite
    name: main
    state: Open</code></pre>
<hr></div>
</div>
<div>
<h2>3. Verify that the MRS server is running from the server linux prompt</h2>
<p>The <em>R server</em>) webservices can also be checked by looking at the machine’s open ports, without going into the admin tool. This command reveals ports the linux machine is listening on:</p>
<pre><code>$ netstat - tupln

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:29130         0.0.0.0:*               LISTEN      42527/mdsd
tcp        0      0 127.0.0.1:29131         0.0.0.0:*               LISTEN      2001/mdsd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1265/sshd
tcp        0      0 0.0.0.0:9054            0.0.0.0:*               LISTEN      55348/Rserve
tcp        0      0 0.0.0.0:9055            0.0.0.0:*               LISTEN      55348/Rserve
tcp6       0      0 :::12805                :::*                    LISTEN      55327/dotnet
tcp6       0      0 :::22                   :::*                    LISTEN      1265/sshd
tcp6       0      0 :::12800                :::*                    LISTEN      55285/dotnet
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1064/dhclient</code></pre>
<p>We can see that port 12800 is active for the web service. 12805 is the compute server, running here on the same machine as the web service.</p>
<p>Next thing you should do is see if you can connect to the service with <code>R server</code> running locally, and load mrsdeploy.</p>
</div>
<div>
<h2>4. Check the MRS server is running by logging-in in from the server itself.</h2>
<p>Do this by running a remote <em>mrsdeploy</em> session from the server as <code>localhost</code>. This is the way one would “run MRS as <em>R Client</em>,” even though the full set of <em>MRS</em> features are available. Running MRS as both a client and a server on the same machine is possible, but I see no purpose other than to test that the web service is accessible. The sequence of steps is:</p>
<pre><code>    $ rserver
    [ MRS banner...]

    > endpoint &lt;- &quot;localhost:12800&quot;   # The forum shows this format for logins.
    > library(mrsdeploy)
    > remoteLogin(endpoint)
    Username: admin
    Password: *************           # The password you set in the admin tool. 

    [...]

    REMOTE> </code></pre>
<p>If authentication is failing, you can look at the tail of the system log file for the error, like this</p>
<pre><code>$ cd /usr/lib64/microsoft-deployr/9.0.1/Microsoft.DeployR.Server.WebAPI/logs
$ sudo tail $(ls -t1 | head -1)   # Look at the end of the most recent logfile
... &quot;Message&quot;:&quot;The username doesn't belong to the admin user&quot;,...</code></pre>
<p>Then, to end the remote session, the command is <code>exit</code>’</p>
<pre><code>    REMOTE> exit</code></pre>
</div>
<div>
<h2>5. Finish VM Configuration for remote access</h2>
<p>Another two steps are needed before you can use the server over the network. You should set the public DNS (e.g. domain) address since the VM’s public IP address is dynamic and may change when the machine is restarted. And as a matter of security, the Azure firewall (the “network security gateway” resource) needs to be configured.</p>
<p>Go back to the <code>portal.azure.com</code> and find these resources associated with the VM: – Public DNS address – Open incoming service ports</p>
<div>
<h3>Public IP</h3>
<p>To set the public DNS name, go to the portal’s VM overview pane and click on the public-IP item, for instance, “mymrs-ip”:</p>
<p><a target="_blank" rel="nofollow" href="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01bb0985f82e970d-pi"><img title="VM_overview" alt="VM_overview" src="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01bb0985f82e970d-800wi" border="0"></a></p>
<p>until you get to the configuration blade:</p>
<p><a target="_blank" rel="nofollow" href="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01bb0985f844970d-pi"><img title="Ip_configuration" alt="Ip_configuration" src="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01bb0985f844970d-800wi" border="0"></a></p>
<p>This will send you to the mymrs-ip component where you can change the DNS label.</p>
</div>
<div>
<h3>Network Security Group</h3>
<p>If you don’t do this, a remote <code>mrsdeploy</code> login attempt will fail with a message</p>
<pre><code>Error: Couldn't connect to server</code></pre>
<p>since only the port 22 for <code>ssh</code> is allowed by default for the VM’s network security gateway. One option is to use <code>ssh</code> to set up port forwarding. I won’t explain that here. The alternative is to configure remote access on the server. For this you’ll need to open the port the admin tool reported as the web endpoint, typically 12800. The inbound security rules’ blade is buried in the VM choices -> Network Interfaces -> Network Security Group -> Inbound Security Rules. Choose “Add” to create a custom inbound rule for TCP port 12800. The result looks like this:</p>
<p><a target="_blank" rel="nofollow" href="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01b8d26d247b970c-pi"><img title="Inbound_security_rules" alt="Inbound_security_rules" src="http://revolution-computing.typepad.com/.a/6a010534b1db25970b01b8d26d247b970c-800wi" border="0"></a></p>
</div>
<p><strong>Now the server is ready for use!</strong></p>
</div>
<div>
<h2>6. Check that the MRS server is running from another machine</h2>
<p>You’ll need a local copy of MRS to do this. Copies are available from a few sources, including a “client side only” copy called, naturally–<em>R Client</em> that is licensed for free. <em>R Client</em> gives you all the remoting capabilities of <em>R Server</em>, also the same custom learning algorithms available with <em>R Server</em>, but unlike <em>R Server</em>, it is limited to datasets that fit in-memory.</p>
<p>The sources of <em>R Server</em> are several:</p>
<ul>
<li>MSDN subscription downloads include <em>R Server</em> for diferent platforms</li>
<li>Also <em>R Client</em> is a free download on MSDN.</li>
<li><em>Microsoft SQL Server</em> comes with <em>R Server</em> as an option. You can install <em>R Server</em> “standalone” with the <em>SQL Server</em> installer in addition to installing it as part of <em>SQL Server</em>.</li>
<li>If you have installed <em>R Tools for Visual Studio</em> (RTVS), the <em>R Tools</em> menu has an item to install <em>R Client</em>.</li>
<li>Of course any VM that comes with <em>R Server</em> will work too. <strong>Notably, the <em>Data Science VM</em>, which hosts an exhaustive collection of data science tools includes a copy of <em>R Server</em> .</strong></li>
</ul>
<p>To remotely login from your local machine, the MRS commands are the same as before, except use the domain name of the server from your local client:</p>
<pre><code>> endpoint &lt;- &quot;mymrs.southcentralus.azure.com:12800'
> library(mrsdeploy)
> remoteLogin(endpoint)</code></pre>
<p>If as shown, you do not include the admin account and passwords as arguments to <code>remoteLogin</code> the command will bring up a modal dialog asking you for them. Be advised that this dialog may be hidden and not come to the front, and you’ll have to look for it.</p>
<hr>
<p>The server will kindly return a banner with the differences between your client and the server MRS environments. Here’s what a proper remote session returns on initiation:</p>
<pre><code>Diff report between local and remote R sessions...

Warning! R version mismatch
local: R version 3.3.2 (2016-10-31)
remote: R version 3.2.3 (2015-12-10)

These R packages installed on the local machine are not on the remote R instance:

   Missing Packages
1        checkpoint
2  CompatibilityAPI
3              curl
...
23            RUnit

The versions of these installed R packages differ:

     Package   Local  Remote
1       base   3.3.2   3.2.3
...
23     utils   3.3.2   3.2.3


Your REMOTE R session is now active.
Commands:
        - pause() to switch to local session &amp; leave remote session on hold.
        - resume() to return to remote session.
        - exit to leave (and terminate) remote session.</code></pre>
<hr>
<p>Once at the <code>REMOTE></code> prompt you can explore the remote interpreter environment. These handy <em>R</em> functions let you explore the remote environment further:</p>
<pre><code>Sys.getenv()    # will show the machine's OS environment variables on the server.
Sys.info()      # returns a character string with machine and user descriptions</code></pre>
<div>
<h3>Environment differences: Adding custom packages to the server</h3>
<p>The comparative listing of package when you log into the remote should alert you to the need to accommodate the differences between local and remote environments. Different R versions generate this warning:</p>
<pre><code>Warning! R version mismatch</code></pre>
<p>Different versions will limit which packages are available for both versions.</p>
<p>Compatible but missing packages can be installed on the server. To be able to install packages when available packages differ, the remote session will need permission to write to one of the directories identified by <code>.libPaths()</code> on the remote server. This is not granted by default. If you feel comfortable with letting the remote user make modifications to the server, you could grant this permission by making this directory writable by everyone</p>
<pre><code> $ sudo chmod a+w /usr/local/lib/R/site-library/</code></pre>
<p>Then to specify a library, for example, <code>glmnet</code> to be installed in this directory use</p>
<pre><code>REMOTE> install.packages(&quot;glmnet&quot;, lib=&quot;/usr/local/lib/R/site-library&quot;)</code></pre>
<p>These installations will persist from one remote session to another, and the “missing packages” warning at login will be updated correctly, although strangely, intellisense for package names always refers to the local list of packages, so will make suggestions that are unavailable at the remote.</p>
</div>
</div>
<div>
<h2>Running batch R job on the server</h2>
<p><strong>Congratulations! Now you can run large <em>R</em> jobs on a VM in the cloud!</strong></p>
<p>There are various uses for the server to take advantage of the VM, in addition to running interactively at the <code>REMOTE></code> prompt. A simple case is to take advantage of the remote server to run large time-consuming jobs. For instance, this interation, to compute a regression’s leave-one-out r-squared values—</p>
<pre><code>    rsqr &lt;- c()
    system.time(
      for (k in 1:nrow(mtcars)) {
        rsqr[k] &lt;- summary(lm(mpg ~ . , data=mtcars[-k,]))$r.squared
    })
    print(summary(rsqr))</code></pre>
<p>—can be done the same remotely:</p>
<pre><code>    remoteExecute(&quot;rsqr &lt;- c()\
    system.time(\
      for (k in 1:nrow(mtcars)) {\
        rsqr[k] &lt;- summary(lm(mpg ~ . , data=mtcars[-k,]))$r.squared\
    })&quot;)</code></pre>
<p>We’ll need to recall the results separately, since only the last value in the remote expression output is printed:</p>
<pre><code>    remoteExecute(&quot;summary(rsqr)&quot;)</code></pre>
<p>For larger chunks of code, you can include them in script files, and execute the file remotely by use <code>mrsdeploy::remoteScript(&quot;myscript.R&quot;)</code> which is simply a wrapper around <code>mrsdeploy::remoteExecute(&quot;myscript.R&quot;, script=TRUE)</code>, where <code>myscript.R</code> is found in your <em>local</em> working directory.</p>
<p>Note that the the <code>mrsdeploy</code> library is not needed in the script running remotely. Indeed, the VM with preinstalled Microsoft R Server 2016 (version 9.0.1) for Linux (Ubuntu version 16.04) runs R version 3.2.3, which does not include the mrsdeploy library. So both <code>library(mrsdeploy)</code> and <code>install.packages(“mrsdeploy&quot;)</code> will generate an error on the remote session. <em>If you’ve included these statements to enable your local script, be sure to remove them if you execute the script remotely, or the script will fail!</em> If you want to use the same script in both places, a simple workaround is to avoid making the library call in the script when it runs in the remore session:</p>
<pre><code>    if ( Sys.info()[&quot;user&quot;] != &quot;rserve2&quot; ) {
      library(mrsdeploy)
    }</code></pre>
<p>The ability of <code>mrsdeploy</code> to execute a script remotely is just the tip of the iceberg. It also enables moving files and variables back and forth between local and remote, and most importantly, configuring <em>R</em> functions as production web services. This set of deployment features merits another entire blog posting.</p>
</div>
<div>
<h2>For more information</h2>
<p>For details about different configuration options see <a target="_blank" rel="nofollow" href="https://msdn.microsoft.com/en-us/microsoft-r/operationalize/configuration-initial">Configuring R Server Operationalization</a>. Libraries as required in the Operationalization instructions are already configured on the VM.</p>
<p>To see what you can do with a remote session, <a target="_blank" rel="nofollow" href="https://msdn.microsoft.com/en-us/microsoft-r/operationalize/remote-execution">have a look here.</a>. And, for a general overview <a target="_blank" rel="nofollow" href="https://msdn.microsoft.com/en-us/microsoft-r/operationalize/data-scientist-get-started">see this.</a>.</p>
<p>Go to <a target="_blank" rel="nofollow" href="https://microsoft.github.io/deployr-api-docs/9.0.1/#statusres">Rserver documentation</a> for the full API reference.</p>
</div>
<p><br>
</div>
<p>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="http://blog.revolutionanalytics.com/2017/03/running-your-r-code-azure.html"> Revolutions</a></strong>.</div>
<hr>
<a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="https://feedburner.google.com/fb/a/mailverify?uri=RBloggers">daily e-mail updates</a></strong> about <a title="The R Project for Statistical Computing" rel="nofollow" href="https://www.r-project.org/">R</a> news and <a title="R tutorials" rel="nofollow" href="https://www.r-bloggers.com/search/tutorial">tutorials</a> on topics such as: <a title="Data science" rel="nofollow" href="https://www.r-bloggers.com/search/data%20science">Data science</a>, <a title="Big Data" rel="nofollow" href="https://www.r-bloggers.com/search/Big%20Data">Big Data, <a title="R jobs" rel="nofollow" href="https://www.r-users.com/">R jobs</a>, visualization (<a title="ggplot and ggplot2 tutorials" rel="nofollow" href="https://www.r-bloggers.com/search/ggplot2">ggplot2</a>, <a title="Boxplots using lattice and ggplot2 tutorials" rel="nofollow" href="https://www.r-bloggers.com/search/boxplot">Boxplots</a>, <a title="Maps and gis" rel="nofollow" href="https://www.r-bloggers.com/search/map">maps</a>, <a title="Animation in R" rel="nofollow" href="https://www.r-bloggers.com/search/animation">animation</a>), programming (<a title="RStudio IDE for R" rel="nofollow" href="https://www.r-bloggers.com/search/RStudio">RStudio</a>, <a title="Sweave and literate programming" rel="nofollow" href="https://www.r-bloggers.com/search/sweave">Sweave</a>, <a title="LaTeX in R" rel="nofollow" href="https://www.r-bloggers.com/search/LaTeX">LaTeX</a>, <a title="SQL and databases" rel="nofollow" href="https://www.r-bloggers.com/search/SQL">SQL</a>, <a title="Eclipse IDE for R" rel="nofollow" href="https://www.r-bloggers.com/search/eclipse">Eclipse</a>, <a title="git and github, Version Control System" rel="nofollow" href="https://www.r-bloggers.com/search/git">git</a>, <a title="Large data in R using Hadoop" rel="nofollow" href="https://www.r-bloggers.com/search/hadoop">hadoop</a>, <a title="Web Scraping of google, facebook, yahoo, twitter and more using R" rel="nofollow" href="https://www.r-bloggers.com/search/Web+Scraping">Web Scraping</a>) statistics (<a title="Regressions and ANOVA analysis tutorials" rel="nofollow" href="https://www.r-bloggers.com/search/regression">regression</a>, <a title="principal component analysis tutorial" rel="nofollow" href="https://www.r-bloggers.com/search/PCA">PCA</a>, <a title="Time series" rel="nofollow" href="https://www.r-bloggers.com/search/time+series">time series</a>, <a title="finance trading" rel="nofollow" href="https://www.r-bloggers.com/search/trading">trading</a>) and more...
<img height="1" alt="" width="1" src="http://feeds.feedburner.com/~r/RBloggers/~4/AFi47S8czcI"></a></div>