请下载中的文件 https://www.box.com/s/z3tldpdykhppmivfexjl
,将其另存为'/ tmp / mydata' 并运行以下代码
datafile="/tmp/mydata"
totalsize=file.info(datafile)$size
lines=totalsize/32
con=file(datafile,"rb")
date<-c()
data<-c()
for (i in 1:lines){
result1<-readBin(con,integer(),n=1,size=4,endian="little")
date<-c(date,result1)
result2<-round(readBin(con,double(),n=7,size=4,endian="little"),2)
data<-c(data,result2)
}
date=data.frame(matrix(date,nrow=lines,ncol=1,byrow=TRUE))
data=data.frame(matrix(round(data,2),nrow=lines,ncol=7,byrow=TRUE))
data=cbind(date,data)
names(data)<-c("date","open","high","low","close","volume","amount","reserved")
data<-data[-c(1:2),]
完成后,请在R控制台中输入data
,
你可以看到长数字,
https://www.box.com/s/lxkbs96vk02p6ekdflbe
为什么round(data,2)
不能舍入2位数?
它是如此奇怪,当我将数据写入csv文件,打开csv文件,我发现它只有2位数!
write.csv(file="/tmp/test",data)
Joris Meys说在for-loops中增加向量是不好的方法,但我发现在我的情况下可能是这样做的好方法,如果没有,如何修改它?让我看看更好的代码。
答案 0 :(得分:1)
关于增长循环的问题,如果你不知道读入的每个二进制向量的长度,一个选项是将所有内容放入列表中(因为我没有因为我没有下载你的数据也没有运行你的码!)。一旦进入列表,你可以在读入的每个元素具有相同的长度之后转到紧凑的形式,或者在这种情况下,如果你想要的只是一个向量,每个列表只有unlist()
。
datafile <- "/tmp/mydata"
totalsize <- file.info(datafile)$size
lines <- totalsize / 32
con <- file(datafile, "rb")
## allocate storage
date <- data <- vector(mode = "list", length = lines)
## although actually growing lists is not inefficient
for (i in 1:lines){
## directly fill in the lists we created using index i to point
## to the ith component of each list
date[[i]] <- readBin(con, integer(), n=1, size=4, endian="little")
data[[i]] <- round(readBin(con,double(), n=7, size=4, endian="little"), 2)
}
此时你有两个列表,如果你想将它们压缩成矢量那么
date <- unlist(date)
data <- unlist(date)