You need to save the connection object returned by file() and then use that object in other functions.

You need to change the appropriate lines to the following (at least):

con <- file("c:/data/perry/data.csv",open="r")
  cline <- readLines(con,n=1)
close(con)

(I don't know if more changes are needed to get it working.)


Note that using the connection object in other functions can have side effects on the connection object (which is how a connection "remembers" its point in the file.) (Perhaps more accurately, the side effect is on the internal system data referred to by the R connection object.)

> con <- textConnection(letters)
> con
     description            class             mode             text
       "letters" "textConnection"              "r"           "text"
          opened         can read        can write
        "opened"            "yes"             "no"
> readLines(con, 1)
[1] "a"
> readLines(con, 1)
[1] "b"
> con.saved <- con
> readLines(con, 1)
[1] "c"
> readLines(con.saved, 1)
[1] "d"
> readLines(con, 1)
[1] "e"
> identical(con, con.saved)
[1] TRUE
> showConnections()
  description class            mode text   isopen   can read can write
3 "letters"   "textConnection" "r"  "text" "opened" "yes"    "no"
>
>

hope this helps,

Tony Plate

At Thursday 11:19 AM 8/28/2003 +1200, you wrote:
I have been trying to read a random sample of lines from a file into a
data frame using readLines(). The help indicates that readLines() will
start from the current line if the connection is open, but presented with
a closed connection it will open it, start from the beginning, and close
it when finished.

In the code that follows I tried to open the file before reading but
apparently without success, because the result was repeated copies of the
first line:

flines <- 107165
slines <- 100
selected <- sort(sample(flines,slines))
strvec <- rep("",slines)
file("c:/data/perry/data.csv",open="r")
isel <- 0
for (iline in 1:slines) {
  isel <- isel + 1
  cline <- readLines("c:/data/perry/data.csv",n=1)
  if (iline == selected[isel]) strvec[isel] <- cline else
    isel <- isel - 1
}
close("c:/data/perry/data.csv")
sel.flows <- read.table(textConnection(strvec), header=FALSE, sep=",")


There was also an error "no applicable method" for close.


Comments gratefully received.

Murray Jorgensen

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help

______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to