R 回合(x,2)根本没有效果?

R 回合(x,2)根本没有效果?,r,R,请在 ,将其另存为“/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") d

请在

,将其另存为“/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),]

Joris Meys说,在for循环中增加向量是一种不好的方法,但我发现在我的例子中,这可能是一种很好的方法,如果不是,如何修改它?让我看看更好的代码。

关于增加循环的问题,一个选择是如果不知道读取的每个二进制向量的长度,则将所有内容都放入一个列表中(因为我没有下载您的数据,也没有运行您的代码,所以我没有这样做!)一旦进入列表,如果读入的每个元素都具有相同的长度,或者在本例中,如果您只需要一个向量,则可以转到压缩表单,只要
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)
}

datafile所有内容看起来都四舍五入(最多)对我来说是两个数字。有什么问题吗?这个问题真的太本地化了。再次查看常见问题解答。当我在做的时候,请立即停止为循环增加向量,否则你会把地狱里的所有魔鬼都吵醒!如何修改它以避免为循环增加向量?在我的情况下,也许这是一个很好的方法。在你的图像中,它看起来就像一切g实际上是四舍五入到两位数。你可能需要了解数字的浮点表示法。(计算机不能用二进制精确地表示每个数字。)@DadaLili:这不是一个好方法。但是如果没有你的文件,我们无法判断正确的方法是什么:你链接到的mydata文件不是数据,它是一个.png屏幕截图。
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)