2012-10-20 27 views
-4

請下載文件中的
https://www.box.com/s/z3tldpdykhppmivfexjlRound(x,2)完全沒有效果?

,將其保存爲 '/ 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),] 

當你完成,請輸入data R中控制檯,
你可以看到很長的數字, https://www.box.com/s/lxkbs96vk02p6ekdflbe
enter image description here 爲什麼round(data,2)不能捨入2位數字?
它就是這麼奇怪,當我把數據寫入csv文件,打開CSV文件,我發現它只有2位!

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

里斯Meys說,這是在for循環增長向量壞的方式,但我在我的情況也許覺得這是應該做的是好辦法,如果不是,如何修改呢?讓我看到了更好的碼。

+3

一切看起來都四捨五入到(最多)兩個數字給我。有什麼問題? – joran

+0

這個問題實在太過本地化了。再次查看FAQ。而當我在這時,請立即停止在for循環中增加向量,或者你把所有的惡魔都嚇跑了! http://www.burns-stat.com/pages/Tutor/R_inferno.pdf –

+0

如何修改它不會增長向量for循環?在我的情況,也許是做一個好辦法。 –

回答

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)