我在S-Plus中运行如下代码,基本就是5楼的代码。
read.DET.data <- function(f) {
counter <- 1
col1.v <- c()
col2.v <- c()
col3.v <- c()
fid <- file( f ,"rb")
tempi <- readBin(fid,integer(), n=1)
while ( length(tempi) != 0) {
col1.v[ counter ] <- tempi
col2.v[ counter ] <- readBin(fid, numeric(),n=1)
col3.v[ counter ] <- readBin(fid, character(),n=1)
counter <- counter + 1
tempi <- readBin(fid, integer(),n=1)
}
close( fid )
data.frame(col1=col1.v,col2=col2.v,col3=col3.v)
#list(col1.v,col2.v,col3.v)
}
zz <- file("testbin.dat", "wb")
writeBin(1,zz)
writeBin(3.23,zz)
writeBin("char1",zz)
writeBin(2,zz)
writeBin(2*3.23,zz)
writeBin("char2",zz)
close(zz)
read.DET.data("testbin.dat")
# col1 col2 col3
#1 1 3.23 char1
#2 2 6.46 char2
运行结果如下:
> read.DET.data <- function(f)
{
counter <- 1
col1.v <- c()
col2.v <- c()
col3.v <- c()
fid <- file(f, "rb")
tempi <- readBin(fid, integer(), n = 1)
while(length(tempi) != 0) {
col1.v[counter] <- tempi
col2.v[counter] <- readBin(fid, numeric(), n = 1)
col3.v[counter] <- readBin(fid, character(), n = 1)
counter <- counter + 1
tempi <- readBin(fid, integer(), n = 1)
}
close(fid)
data.frame(col1 = col1.v, col2 = col2.v, col3 = col3.v)
}
> zz <- file("testbin.dat", "wb")
> writeBin(1, zz)
NULL
> writeBin(3.23, zz)
NULL
> writeBin("char1", zz)
NULL
> writeBin(2, zz)
NULL
> writeBin(2 * 3.23, zz)
NULL
> writeBin("char2", zz)
NULL
> close(zz)
[1] T
> read.DET.data("testbin.dat")
fread: No error
Problem in readBin(fid, integer(), n = 1): error reading data
Use traceback() to see the call stack
搞了半天,还是不明白为什么会出这个错误。
好像代码没有问题啊。
完全复制5楼代码,结果同样。
[此贴子已经被作者于2008-8-20 23:23:56编辑过]