read.table() and read.csv both Error in Rmd

49,302

Solution 1

The short answer is:

KNOW THY getwd()

Do not confuse the working directory of your current R console with the working directory of your R Markdown document (which is the directory of this R Markdown document). When in doubt, print out getwd() where you want to know your working directory (e.g. in *.Rmd). Note R Markdown documents are compiled in separate R sessions to enhance reproducibility, so you current R console has nothing to do with the compilation of the R Markdown documents.

Solution 2

Your current RMD file is not in your current working directory

Solution 3

Mine is a silly case, but may happen to someone else... the Rmd had been saved to my default working directory not the current working directory where I thought I was. I had a long list of files and didn't realize the script was not there. Worth to check!

Solution 4

Just try and place all your data file where your Markdown (.Rmd) file resides.

Share:
49,302

Related videos on Youtube

Liu
Author by

Liu

Updated on August 24, 2020

Comments

  • Liu
    Liu over 3 years

    I want to read a txt in Rmd

    ---
    title: "Untitled"
    output: html_document
    ---
    ```{r}
    country <- read.table("country.txt")
    country
    ```
    

    It show error:

    processing file: Preview-2878539db5c7.Rmd
    
    Quitting from lines 6-8 (Preview-2878539db5c7.Rmd) 
    Error in file(file, "rt") : cannot open the connection
    Calls: <Anonymous> ... withCallingHandlers -> withVisible -> eval -> eval -> read.table -  > file
    Execution halted
    

    But I can run code in R console successfully

    > country <- read.table("country.txt")
    
    > country
         production1 education1     fir1 inflation1 lq1 nonstatein1 patent1     tax1   trade1
    2001    52920.47   132649.4 2.339263   0.700000  NA    19562.16  109313 23783.07 23783.07
    2002    65876.57   144090.3 2.500826  -0.800000  NA    24727.30  131972 27479.61 27479.61
    2003    89227.20   156280.4 2.691411   1.168900  NA    34044.45  164611 31537.50 31537.50
    2004    92656.06   167683.7 2.615238   3.878600  NA    45613.10  177364 36179.87 36179.87
    2005   167115.37   171379.7 2.617289   1.810000  NA    77525.52  231570 42008.37 42008.37
    2006   218827.79   181084.6 2.578939   1.467800  NA    77441.52  282315 54866.43 54866.43
    2007   286691.88   192677.9 2.439093   4.772700  NA    99032.26  333059 66453.31 66453.31
    2008   364955.86   202542.8 2.440807   5.864570  NA   124621.23  418524 74104.80 74104.80
    2009   398476.09   213539.2 3.783803  -0.693900  NA   153670.18  537957 65501.69 65501.69
    2010   511364.93   254805.1 3.806066   3.322200  NA   194286.94  700304 81966.57 81966.57
    2011   624657.55   279690.7 2.862413   5.393433  NA   229513.81  997132 91118.75 91118.75
    

    The file is existing in wd

    > file.exists("country.txt")
    [1] TRUE
    

    I also try to use read.csv() but it show similar error:

    processing file: Preview-28786aad2e0.Rmd
    
    Quitting from lines 6-8 (Preview-28786aad2e0.Rmd) 
    Error in file(file, "rt") : cannot open the connection
    Calls: <Anonymous> ... withVisible -> eval -> eval -> read.csv -> read.table -> file
    Execution halted
    
    • rawr
      rawr over 9 years
      use the absolute path or realize that your working directory and the knitr directory may not be the same
    • daroczig
      daroczig over 9 years
      +1 for @rawr's comment except for using absolute path :)
    • rawr
      rawr over 9 years
      rm -r ~/path/to/daroczig
    • Liu
      Liu over 9 years
      I tried your solution but didn't work.
    • daroczig
      daroczig over 9 years
      @rawr I meant +1 for "realize that your working directory and the knitr directory may not be the same". What you mean with the rm command? :)
  • Yihui Xie
    Yihui Xie over 9 years
    @StevenLee No, you are most likely to be doing the wrong thing if you find you have to use setwd() or using absolute paths. As I said, go ahead and figure out what your working directory getwd() really is, and always think about relative paths. For example, if country.txt is under the same directory as your Rmd file, you do not need to do anything and you are all set.
  • xgdgsc
    xgdgsc over 9 years
    But there are occasions when data files may be far from the code( like I keep code in sync with a net disk, while really large data file elsewhere), is there an option to set the knitr document working directory?
  • xgdgsc
    xgdgsc over 9 years
    The opts_knit$set(root.dir = 'path') doesn' t work outside the document. For accessing from other people/OS, I need the working directory set from outside the document.
  • xgdgsc
    xgdgsc over 9 years
    The global options default working directory setting in Rstudio doesn' t work for .Rmd files. Maybe you need to make it clear the setting is for .R files only, and adding working directory setting in the Rmd Document Options for file.
  • Yihui Xie
    Yihui Xie over 9 years
    @xgdgsc You can always use absolute paths (e.g. read.csv('/full/path/to/your/data')) if you do not need other people to reproduce your document on different computers.
  • xgdgsc
    xgdgsc over 9 years
    But I do need me or other people on other computer with different OS to reproduce. Maybe separating code to a .R file is a better workflow here.
  • OganM
    OganM over 9 years
    setwd() seems to work but in every code chunk it resets itself. As long as you keep that in mind it'll be fine.
  • A.Mstt
    A.Mstt about 9 years
    I agree with @xgdgsc, being able to setwd() at the beginning of the document would be optimal. Is there not a way of preventing every code chunk from resetting it?