Round(x,2)根本没有效果?

时间:2012-10-20 14:51:20

标签: r

请下载中的文件 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
enter image description here 为什么round(data,2)不能舍入2位数? 它是如此奇怪,当我将数据写入csv文件,打开csv文件,我发现它只有2位数!

write.csv(file="/tmp/test",data)

Joris Meys说在for-loops中增加向量是不好的方法,但我发现在我的情况下可能是这样做的好方法,如果没有,如何修改它?让我看看更好的代码。

1 个答案:

答案 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)