R строка с нулевым символом - PullRequest
0 голосов
/ 05 марта 2019

Кажется довольно ясным, что строки R не могут иметь нулевых символов.(ref: https://stat.ethz.ch/R-manual/R-devel/library/base/html/Quotes.html). Проблема в том, что мне нужно вывести некоторые nuls в файл. Ниже приведено то, что я написал, когда не знал, что у меня возникла проблема, и это работает с файлом, когда моим несоответствующим значением является любой другой символ.

Цель кода - взять 2-мерную матрицу и вывести 1-символьную строку, где совпадения помечены шестнадцатеричным числом 80, а несовпадения - шестнадцатеричным 0 (ноль). Если 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

Конечная цель - вывести в файл эту конструкцию данных сnuls в нем. Я думал, что собираюсь использовать writeLines ...

(Добавлен лучший пример кода)

1 Ответ

1 голос
/ 05 марта 2019

Вы не можете иметь nuls в строках, но у вас может быть необработанный вектор с байтом 0.Например, вы можете изменить свою функцию на

PrintCellsWhere<-function(mymat=matrix(), value=-1) {
    as.raw(ifelse(mymat==value, 128,0))
}

Обратите внимание, что двойной цикл вообще не нужен в R. Это вернет «необработанный» байтовый вектор в R. Вы можете записать это в файл с чем-токак

writeBin(PrintCellsWhere(mat, 1), "test.bin")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...