1 Install and configure R on remote system

  • R (>= 3.4.0) should be installed via conda (miniconda or anaconda)

  • Install “radian”, via conda, as an alternative interface for default R (strongly recommended)

  • After “radian” is installed, add this line in .bashrc or .bash_profile

    alias r="radian"
  • Install following packages (always try to install R packages via conda first):

    • httpgd
    • languageserver
    • devtools
    • knitr
    • rmarkdown
  • For example:

    conda install -c conda-forge r-languageserver
  • If the required package cannot be found on conda, try to install from github (devtools packages is required)

  • Create or add the following lines to “~/.Rprofile”

    source(file.path(Sys.getenv(
        if (.Platform$OS.type == "windows") "USERPROFILE" else "HOME"
    ), ".vscode-R", "init.R"))
  • Create or add the following contents to “~/.vscode/settings.json”

    {
        "r.rpath.linux": "[link_to_R_execute_file]",
        "r.rterm.linux": "[link_to_R_execute_file]"
        "files.associations": {
            "*.Rmd": "rmd"
        }
    }
  • NOTE:

    • R execute file can be found by “which R”
    • From now, always open R via “radian” (which is aliased as “r”)

2 Install VSCode

3 Install extensions

  • Extension for remote SSH connection

    1. Remote - SSH & Remote - SSH: Editing Configuration
    2. R (by Yuki Ueda)
    3. Other recommended extensions:
      • Dracula Official
      • Vim
      • vscode-icons
      • Bracket Pairs Colorizer
  • For Mac OS (and linux): should add all SSH configurations in : /Users/[idname]/.ssh/config

  • Sample of config file:

    Host *
        ServerAliveInterval 300
        ForwardAgent yes
        ForwardX11 yes
        ForwardX11Trusted yes
        XAuthLocation /opt/local/bin/xauth
    
    Host [Host_address_1]
        HostName [Host_name_1]
        User [User_name]
        Compression yes
        Ciphers aes128-ctr,aes128-cbc
    
    Host [A_host_address_jump_from_Address_1]
        Hostname [Host_name_2]
        ProxyJump [Host_address_1]
    
    Host [A_special_host_address]
        HostName [A_special_host_name]
        UserKnownHostsFile=/dev/null
        StrictHostKeyChecking=no
    
  • TRICK: Setup ssh connection without password

    1. Create public and private keys: ssh-keygen ==> By default, the key file is stored in /home/[user_id]/.ssh/id_rsa.pub
    2. Copy the public key to remote-host: ssh-copy-id ~/.ssh/id_rsa/pub remote-host
    3. Log in for the first time (have to)
    4. Ref: https://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/

4 Configure on local computer

  • Press F1 to open “settings.json”

  • The following options MUST be noticed:

    • “r.alwaysUseActiveTerminal”: true,
    • “r.bracketedPaste”: true,
    • “r.sessionWatcher”: true,
    • “r.lsp.diagnostics”: false,
    • “r.plot.useHttpgd”: true,
  • Other options can be found in below example of “settings.json”

    {
      "workbench.iconTheme": "vscode-icons",
      "workbench.editor.highlightModifiedTabs": true,
      "r.alwaysUseActiveTerminal": true,
      "r.bracketedPaste": true,
      "r.sessionWatcher": true,
      "r.lsp.diagnostics": false,
      "r.plot.useHttpgd": true,
      "editor.minimap.enabled": false,
      "editor.renderWhitespace": "all",
      "editor.fontFamily": "Fira Code",
      "editor.fontLigatures": true,
      "editor.fontSize": 13,
      "editor.letterSpacing": -0.5,
      "editor.cursorStyle": "underline",
      "editor.quickSuggestions": {
          "comments": "off",
          "strings": "off",
          "other": "off"
      },
      "editor.acceptSuggestionOnEnter": "off",
      "editor.quickSuggestionsDelay": 10,
      "editor.wordBasedSuggestions": false,
      "editor.suggestOnTriggerCharacters": false,
      "editor.parameterHints.enabled": false,
      "editor.tabSize": 2,
      "editor.insertSpaces": true,
      "editor.detectIndentation": false,
      "terminal.integrated.fontFamily": "Fira Code",
      "terminal.integrated.fontSize":12,
      "terminal.integrated.gpuAcceleration": "off",
      "files.autoSave": "afterDelay",
      "files.autoSaveDelay": 13000,
      "workbench.colorTheme": "Dracula",
      "vsicons.dontShowNewVersionMessage": true,
      "editor.rulers": [
          80
      ],
      "remote.SSH.connectTimeout": 131,
      "remote.SSH.remotePlatform": {
          "101.96.72.101": "linux"
      },
      "window.zoomLevel": -0.28133422777602873,
      "workbench.layoutControl.enabled": false,
      "window.commandCenter": false,
    } 
LS0tCnRpdGxlOiAiSW5zdGFsbGluZyBSICYgUm1hcmtkb3duIGludGVncmF0ZWQgaW4gVlNDb2RlIgphdXRob3I6ICJieSBOWFRUTlgiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiAKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgbnVtYmVyX3NlY3Rpb25zOiBUUlVFCiAgICB0aGVtZToKICAgICAgICBib290c3dhdGNoOiBsdW1lbgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGRldjogJ3N2ZycKLS0tCgo8c3R5bGU+Ci8qIHJlc2l6ZSB0aGUgd2lkZ2V0IGNvbnRhaW5lciAqLwoucGxvdGx5IHsgCiAgd2lkdGg6IDYwJSAhaW1wb3J0YW50OwogIG1hcmdpbjogYXV0bzsKfQoKLyogY2VudGVyIHRoZSB3aWRnZXQgKi8KZGl2LnN2Zy1jb250YWluZXIgewogIG1hcmdpbjogYXV0byAhaW1wb3J0YW50Owp9Cjwvc3R5bGU+CgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBmaWcuYWxpZ24gPSAiY2VudGVyIikKYGBgCgpgYGB7ciBrbGlwcHksIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRX0Ka2xpcHB5OjprbGlwcHkoYygncicsICdweXRob24nLCAnanNvbicsICdsaW51eCcpLCBwb3NpdGlvbiA9IGMoJ3RvcCcsICdyaWdodCcpLAogICAgICAgICAgICAgICB0b29sdGlwX21lc3NhZ2UgPSAnQ2xpY2sgdG8gY29weScsIHRvb2x0aXBfc3VjY2VzcyA9ICdDb3BpZWQnKQpgYGAKCiFbXShmaWd1cmVzL3ZzY29kZV9jYXAucG5nKQoKIyBJbnN0YWxsIGFuZCBjb25maWd1cmUgUiBvbiByZW1vdGUgc3lzdGVtCgoqICoqUiAoPj0gMy40LjApIHNob3VsZCBiZSBpbnN0YWxsZWQgdmlhIGNvbmRhIChtaW5pY29uZGEgb3IgYW5hY29uZGEpKioKCiogKipJbnN0YWxsICJyYWRpYW4iLCB2aWEgY29uZGEsIGFzIGFuIGFsdGVybmF0aXZlIGludGVyZmFjZSBmb3IgZGVmYXVsdCBSIChzdHJvbmdseSByZWNvbW1lbmRlZCkqKgoKKiAqKkFmdGVyICJyYWRpYW4iIGlzIGluc3RhbGxlZCwgYWRkIHRoaXMgbGluZSBpbiAuYmFzaHJjIG9yIC5iYXNoX3Byb2ZpbGUqKgoKICAgIGBgYHtsaW51eCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KICAgIGFsaWFzIHI9InJhZGlhbiIKICAgIGBgYAoKKiAqKkluc3RhbGwgZm9sbG93aW5nIHBhY2thZ2VzIChhbHdheXMgdHJ5IHRvIGluc3RhbGwgUiBwYWNrYWdlcyB2aWEgY29uZGEgZmlyc3QpOioqCgogICAgKiBodHRwZ2QKICAgICogbGFuZ3VhZ2VzZXJ2ZXIKICAgICogZGV2dG9vbHMKICAgICoga25pdHIKICAgICogcm1hcmtkb3duCgoqIEZvciBleGFtcGxlOgoKICAgIGBgYHtsaW51eCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KICAgIGNvbmRhIGluc3RhbGwgLWMgY29uZGEtZm9yZ2Ugci1sYW5ndWFnZXNlcnZlcgogICAgYGBgCgoqICoqSWYgdGhlIHJlcXVpcmVkIHBhY2thZ2UgY2Fubm90IGJlIGZvdW5kIG9uIGNvbmRhLCB0cnkgdG8gaW5zdGFsbCBmcm9tIGdpdGh1YiAoZGV2dG9vbHMgcGFja2FnZXMgaXMgcmVxdWlyZWQpKioKCiogKipDcmVhdGUgb3IgYWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gIn4vLlJwcm9maWxlIioqCgogICAgYGBge2xpbnV4IG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQogICAgc291cmNlKGZpbGUucGF0aChTeXMuZ2V0ZW52KAogICAgICAgIGlmICguUGxhdGZvcm0kT1MudHlwZSA9PSAid2luZG93cyIpICJVU0VSUFJPRklMRSIgZWxzZSAiSE9NRSIKICAgICksICIudnNjb2RlLVIiLCAiaW5pdC5SIikpCiAgICBgYGAKCiogKipDcmVhdGUgb3IgYWRkIHRoZSBmb2xsb3dpbmcgY29udGVudHMgdG8gIn4vLnZzY29kZS9zZXR0aW5ncy5qc29uIioqCgogICAgYGBge2pzb24gbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9CiAgICB7CiAgICAgICAgInIucnBhdGgubGludXgiOiAiW2xpbmtfdG9fUl9leGVjdXRlX2ZpbGVdIiwKICAgICAgICAici5ydGVybS5saW51eCI6ICJbbGlua190b19SX2V4ZWN1dGVfZmlsZV0iCiAgICAgICAgImZpbGVzLmFzc29jaWF0aW9ucyI6IHsKICAgICAgICAgICAgIiouUm1kIjogInJtZCIKICAgICAgICB9CiAgICB9CiAgICBgYGAKCiogKipOT1RFOioqCiAgICAqIFIgZXhlY3V0ZSBmaWxlIGNhbiBiZSBmb3VuZCBieSAid2hpY2ggUiIKICAgICogRnJvbSBub3csIGFsd2F5cyBvcGVuIFIgdmlhICJyYWRpYW4iICh3aGljaCBpcyBhbGlhc2VkIGFzICJyIikKCgojIEluc3RhbGwgVlNDb2RlCgoqICoqRG93bmxvYWQgdGhlIGluc3RhbGxhdGlvbiBmcm9tIGZvbGxvd2luZyBsaW5rOiBodHRwczovL2NvZGUudmlzdWFsc3R1ZGlvLmNvbS9kb3dubG9hZCoqCgoKIyBJbnN0YWxsIGV4dGVuc2lvbnMKCiogKipFeHRlbnNpb24gZm9yIHJlbW90ZSBTU0ggY29ubmVjdGlvbioqCgogICAgMS4gUmVtb3RlIC0gU1NIICYgUmVtb3RlIC0gU1NIOiBFZGl0aW5nIENvbmZpZ3VyYXRpb24KICAgIDIuIFIgKGJ5IFl1a2kgVWVkYSkKICAgIDMuIE90aGVyIHJlY29tbWVuZGVkIGV4dGVuc2lvbnM6CiAgICAgICAgKiBEcmFjdWxhIE9mZmljaWFsCiAgICAgICAgKiBWaW0KICAgICAgICAqIHZzY29kZS1pY29ucwogICAgICAgICogQnJhY2tldCBQYWlycyBDb2xvcml6ZXIKCgoqICoqRm9yIE1hYyBPUyAoYW5kIGxpbnV4KTogc2hvdWxkIGFkZCBhbGwgU1NIIGNvbmZpZ3VyYXRpb25zIGluIDogL1VzZXJzL1tpZG5hbWVdLy5zc2gvY29uZmlnKioKCiogU2FtcGxlIG9mIGNvbmZpZyBmaWxlOgoKICAgIGBgYHtsaW51eCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KICAgIEhvc3QgKgogICAgICAgIFNlcnZlckFsaXZlSW50ZXJ2YWwgMzAwCiAgICAgICAgRm9yd2FyZEFnZW50IHllcwogICAgICAgIEZvcndhcmRYMTEgeWVzCiAgICAgICAgRm9yd2FyZFgxMVRydXN0ZWQgeWVzCiAgICAgICAgWEF1dGhMb2NhdGlvbiAvb3B0L2xvY2FsL2Jpbi94YXV0aAoKICAgIEhvc3QgW0hvc3RfYWRkcmVzc18xXQogICAgICAgIEhvc3ROYW1lIFtIb3N0X25hbWVfMV0KICAgICAgICBVc2VyIFtVc2VyX25hbWVdCiAgICAgICAgQ29tcHJlc3Npb24geWVzCiAgICAgICAgQ2lwaGVycyBhZXMxMjgtY3RyLGFlczEyOC1jYmMKCiAgICBIb3N0IFtBX2hvc3RfYWRkcmVzc19qdW1wX2Zyb21fQWRkcmVzc18xXQogICAgICAgIEhvc3RuYW1lIFtIb3N0X25hbWVfMl0KICAgICAgICBQcm94eUp1bXAgW0hvc3RfYWRkcmVzc18xXQoKICAgIEhvc3QgW0Ffc3BlY2lhbF9ob3N0X2FkZHJlc3NdCiAgICAgICAgSG9zdE5hbWUgW0Ffc3BlY2lhbF9ob3N0X25hbWVdCiAgICAgICAgVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbAogICAgICAgIFN0cmljdEhvc3RLZXlDaGVja2luZz1ubwoKICAgIGBgYAoKCiogKipUUklDSzogU2V0dXAgc3NoIGNvbm5lY3Rpb24gd2l0aG91dCBwYXNzd29yZCoqCgogICAgMS4gQ3JlYXRlIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlzOiBzc2gta2V5Z2VuID09PiBCeSBkZWZhdWx0LCB0aGUga2V5IGZpbGUgaXMgc3RvcmVkIGluIC9ob21lL1t1c2VyX2lkXS8uc3NoL2lkX3JzYS5wdWIKICAgIDIuIENvcHkgdGhlIHB1YmxpYyBrZXkgdG8gcmVtb3RlLWhvc3Q6IHNzaC1jb3B5LWlkIH4vLnNzaC9pZF9yc2EvcHViIHJlbW90ZS1ob3N0CiAgICAzLiBMb2cgaW4gZm9yIHRoZSBmaXJzdCB0aW1lIChoYXZlIHRvKQogICAgNC4gUmVmOiBodHRwczovL3d3dy50aGVnZWVrc3R1ZmYuY29tLzIwMDgvMTEvMy1zdGVwcy10by1wZXJmb3JtLXNzaC1sb2dpbi13aXRob3V0LXBhc3N3b3JkLXVzaW5nLXNzaC1rZXlnZW4tc3NoLWNvcHktaWQvCgoKIyBDb25maWd1cmUgb24gbG9jYWwgY29tcHV0ZXIKCiogKipQcmVzcyBGMSB0byBvcGVuICJzZXR0aW5ncy5qc29uIioqCgoqICoqVGhlIGZvbGxvd2luZyBvcHRpb25zIE1VU1QgYmUgbm90aWNlZDoqKgoKICAgICogInIuYWx3YXlzVXNlQWN0aXZlVGVybWluYWwiOiB0cnVlLAogICAgKiAici5icmFja2V0ZWRQYXN0ZSI6IHRydWUsCiAgICAqICJyLnNlc3Npb25XYXRjaGVyIjogdHJ1ZSwKICAgICogInIubHNwLmRpYWdub3N0aWNzIjogZmFsc2UsCiAgICAqICJyLnBsb3QudXNlSHR0cGdkIjogdHJ1ZSwKCgoqIE90aGVyIG9wdGlvbnMgY2FuIGJlIGZvdW5kIGluIGJlbG93IGV4YW1wbGUgb2YgInNldHRpbmdzLmpzb24iCgogICAgYGBge2pzb24gbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0V9CiAgICB7CiAgICAgICJ3b3JrYmVuY2guaWNvblRoZW1lIjogInZzY29kZS1pY29ucyIsCiAgICAgICJ3b3JrYmVuY2guZWRpdG9yLmhpZ2hsaWdodE1vZGlmaWVkVGFicyI6IHRydWUsCiAgICAgICJyLmFsd2F5c1VzZUFjdGl2ZVRlcm1pbmFsIjogdHJ1ZSwKICAgICAgInIuYnJhY2tldGVkUGFzdGUiOiB0cnVlLAogICAgICAici5zZXNzaW9uV2F0Y2hlciI6IHRydWUsCiAgICAgICJyLmxzcC5kaWFnbm9zdGljcyI6IGZhbHNlLAogICAgICAici5wbG90LnVzZUh0dHBnZCI6IHRydWUsCiAgICAgICJlZGl0b3IubWluaW1hcC5lbmFibGVkIjogZmFsc2UsCiAgICAgICJlZGl0b3IucmVuZGVyV2hpdGVzcGFjZSI6ICJhbGwiLAogICAgICAiZWRpdG9yLmZvbnRGYW1pbHkiOiAiRmlyYSBDb2RlIiwKICAgICAgImVkaXRvci5mb250TGlnYXR1cmVzIjogdHJ1ZSwKICAgICAgImVkaXRvci5mb250U2l6ZSI6IDEzLAogICAgICAiZWRpdG9yLmxldHRlclNwYWNpbmciOiAtMC41LAogICAgICAiZWRpdG9yLmN1cnNvclN0eWxlIjogInVuZGVybGluZSIsCiAgICAgICJlZGl0b3IucXVpY2tTdWdnZXN0aW9ucyI6IHsKICAgICAgICAgICJjb21tZW50cyI6ICJvZmYiLAogICAgICAgICAgInN0cmluZ3MiOiAib2ZmIiwKICAgICAgICAgICJvdGhlciI6ICJvZmYiCiAgICAgIH0sCiAgICAgICJlZGl0b3IuYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiOiAib2ZmIiwKICAgICAgImVkaXRvci5xdWlja1N1Z2dlc3Rpb25zRGVsYXkiOiAxMCwKICAgICAgImVkaXRvci53b3JkQmFzZWRTdWdnZXN0aW9ucyI6IGZhbHNlLAogICAgICAiZWRpdG9yLnN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzIjogZmFsc2UsCiAgICAgICJlZGl0b3IucGFyYW1ldGVySGludHMuZW5hYmxlZCI6IGZhbHNlLAogICAgICAiZWRpdG9yLnRhYlNpemUiOiAyLAogICAgICAiZWRpdG9yLmluc2VydFNwYWNlcyI6IHRydWUsCiAgICAgICJlZGl0b3IuZGV0ZWN0SW5kZW50YXRpb24iOiBmYWxzZSwKICAgICAgInRlcm1pbmFsLmludGVncmF0ZWQuZm9udEZhbWlseSI6ICJGaXJhIENvZGUiLAogICAgICAidGVybWluYWwuaW50ZWdyYXRlZC5mb250U2l6ZSI6MTIsCiAgICAgICJ0ZXJtaW5hbC5pbnRlZ3JhdGVkLmdwdUFjY2VsZXJhdGlvbiI6ICJvZmYiLAogICAgICAiZmlsZXMuYXV0b1NhdmUiOiAiYWZ0ZXJEZWxheSIsCiAgICAgICJmaWxlcy5hdXRvU2F2ZURlbGF5IjogMTMwMDAsCiAgICAgICJ3b3JrYmVuY2guY29sb3JUaGVtZSI6ICJEcmFjdWxhIiwKICAgICAgInZzaWNvbnMuZG9udFNob3dOZXdWZXJzaW9uTWVzc2FnZSI6IHRydWUsCiAgICAgICJlZGl0b3IucnVsZXJzIjogWwogICAgICAgICAgODAKICAgICAgXSwKICAgICAgInJlbW90ZS5TU0guY29ubmVjdFRpbWVvdXQiOiAxMzEsCiAgICAgICJyZW1vdGUuU1NILnJlbW90ZVBsYXRmb3JtIjogewogICAgICAgICAgIjEwMS45Ni43Mi4xMDEiOiAibGludXgiCiAgICAgIH0sCiAgICAgICJ3aW5kb3cuem9vbUxldmVsIjogLTAuMjgxMzM0MjI3Nzc2MDI4NzMsCiAgICAgICJ3b3JrYmVuY2gubGF5b3V0Q29udHJvbC5lbmFibGVkIjogZmFsc2UsCiAgICAgICJ3aW5kb3cuY29tbWFuZENlbnRlciI6IGZhbHNlLAogICAgfSAKICAgIGBgYAoKIyBSZWZlcmVuY2VzCgoqIGh0dHBzOi8vcmVua3VuLm1lLzIwMTkvMTIvMTEvd3JpdGluZy1yLWluLXZzY29kZS1hLWZyZXNoLXN0YXJ0LwoqIGh0dHBzOi8vcmVua3VuLm1lLzIwMTkvMTIvMjYvd3JpdGluZy1yLWluLXZzY29kZS1pbnRlcmFjdGluZy13aXRoLWFuLXItc2Vzc2lvbi8KKiBodHRwczovL2NvZGUudmlzdWFsc3R1ZGlvLmNvbS9kb2NzL2xhbmd1YWdlcy9yCiogaHR0cHM6Ly9naXRodWItd2lraS1zZWUucGFnZS9tL0lrdXlhZGV1L3ZzY29kZS1SL3dpa2kvUi1TZXNzaW9uLXdhdGNoZXIKKiBodHRwczovL2dpdGh1Yi5jb20vUkVkaXRvclN1cHBvcnQvdnNjb2RlLVIvd2lraS9SLU1hcmtkb3duCiogaHR0cHM6Ly9naXRodWIuY29tL1JFZGl0b3JTdXBwb3J0L3ZzY29kZS1SL3dpa2kvUi1TZXNzaW9uLXdhdGNoZXIKKiBodHRwczovL2dpdGh1Yi5jb20vUkVkaXRvclN1cHBvcnQvdnNjb2RlLVIvaXNzdWVzLzEwMTMKKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MjI4NDM0NS9ob3ctdG8tc2hvdy1yLWdyYXBoLWZyb20tdmlzdWFsLXN0dWRpby1jb2RlCg==