带nul字符的R字符串

时间:2019-03-05 15:06:15

标签: r

很明显,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 ...

(添加了一个更好的代码示例)

1 个答案:

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