很明显,R字符串不能包含nul字符。 (参考:https://stat.ethz.ch/R-manual/R-devel/library/base/html/Quotes.html)。问题是,我需要将一些nul输出到文件中。以下是我不知道遇到问题时写的内容,当我的不匹配值是其他任何字符时,它都可以工作。
该代码的目的是获取2d矩阵并输出一个1d字符串,其中的命中标记为十六进制80,不匹配项为十六进制0(nul)。如果R不允许字符串包含NUL,执行此操作的“ R”方式是什么?
mat<-matrix(c(0,0,0, 0,0,0, 1,0,0),nrow=3,ncol=3)
PrintCellsWhere<-function(mymat=matrix(),value=-1) {
outputstring<-""
for(j in 1:ncol(mymat)) {
for(i in 1:nrow(mymat)) {
if(mymat[i,j]==value) {
outputstring<-paste0(outputstring,"\x80")
} else{
outputstring<-paste0(outputstring,"\x00")
}
}
}
return(outputstring)
}
PrintCellsWhere(mymat=mat,value=1)
已报告错误消息:错误:不允许使用nul字符
最终目标是将其中包含nul的此数据构造输出到文件中。我以为我要使用writeLines ...
(添加了一个更好的代码示例)
答案 0 :(得分:1)
字符串中不能包含nul,但是可以有一个0字节的原始向量。例如,您可以将功能更改为
PrintCellsWhere<-function(mymat=matrix(), value=-1) {
as.raw(ifelse(mymat==value, 128,0))
}
请注意,R中根本不需要双循环。这将在R中返回一个“原始”字节向量。您可以使用类似的东西将其写入文件中
writeBin(PrintCellsWhere(mat, 1), "test.bin")