2012-05-28 31 views
2

下面给出的代码是将二进制文件从float32转换为16b,比例因子为10.我遇到了%d失效的错误。为什么会在R中导致无效格式'%d?

setwd("C:\\2001") 
for (b in paste("data", 1:365, ".flt", sep="")) { 
    conne <- file(b, "rb") 
    file1<- readBin(conne, double(), size=4, n=360*720, signed=TRUE) 
    file1[file1 != -9999] <- file1[file1 != -9999]*10 
    close(conne) 
    fileName <- sprintf("C:\\New folder (11)\\NewFile%d.bin", b) 
    writeBin(as.integer(file1), fileName, size = 2) 
} 

结果:

Error in sprintf("C:\\New folder (11)\\NewFile%d.bin", : 
invalid format '%d'; use format %s for character objects 

我用%s通过R.But所建议的从1中的文件:365是完全空的

+1

%d是无效的,因为(正如R建议的那样)你给它一个字符向量(例如“data1.flt”)而不是一个整数。你可以使用'for(i in 1:365){b < - paste0(“data”,i,“。flt”); ... sprintf(“...%d ...”,i)}',但这不太可能解决您真正的问题,这是目前不可重复的... –

回答

5

%d为字符串内的整数变量的占位符。因此,当您使用sprintf(%d, var)时,var必须是整数。

就你而言,变量b是一个字符串(或字符对象)。所以,你使用占位符作为字符串变量,这是%s

现在,如果你的文件是空的,你的代码中的其他地方肯定会出错。你应该问另一个更具体的问题。

相关问题