Сценарий устранения неполадок, почему NULL - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь обработать большой файл, чтобы получить серийный результат по смещенной позиции, все отдельные части работают нормально, но затем мне нужно записать результат в файл, для этого упражнения, чтобы получить больше навыков, я сначала пытаюсь поместить все их в df и это не работает, я получаю NULL или другую ошибку, что не так, пожалуйста, проверьте мой код. Я пытался использовать df[nrow(df) + 1,] = list( "x")

#  z <- readLines("C:\\RRR\\CA_Mild1.txt",warn=FALSE)
z <- c("A111111111111110111111711111111111", "B222222222222222222222222222222222")
z    # test sum by offset = OK
cat("F1:  ", format(sum(as.numeric(sub(' ','0',(sub(' ','0',substr(z,5,6)))))),big.mark=","))
cat("F2:  ", format(sum(as.numeric(sub(' ','0',(sub(' ','0',substr(z,15,17)))))),big.mark=","))
cat("F3:  ", format(sum(as.numeric(sub(' ','0',(sub(' ','0',substr(z,22,24)))))),big.mark=","))


     # trying now to write all results to df  and/or write to file        ERROR !!!
df <- data.frame(Value=character())    # create new df
df
df[nrow(df) + 1,] = list ( cat("F1:  ", format(sum(as.numeric(sub(' ','0',(sub(' ','0',substr(z,5,6)))))),big.mark=",")) )

даже когда я пытаюсь сохранить один результат в var, я получаю NULL

a <- cat("F1:  ", format(sum(as.numeric(sub(' ','0',(sub(' ','0',substr(z,5,6)))))),big.mark=","))
a
> a <- cat("F1:  ", format(sum(as.numeric(sub(' ','0',(sub(' ','0',substr(z,5,6)))))),big.mark=","))
F1:   33
> a
NULL

1 Ответ

2 голосов
/ 30 мая 2019

Два изменения исправят ваш код, я считаю.

Во-первых, вместо cat используйте paste0.Я не слишком знаком с cat, но paste0 соединит ваши строки вместе, если вы этого хотите.Пока я не переключаюсь, я получаю сообщение об ошибке: replacement has length 0.

Во-вторых, добавьте stringsAsFactors = FALSE при создании фрейма данных:

df <- data.frame(Value=character(), stringsAsFactors = F)

Пока я не сделаю это, я получувторая ошибка, invalid factor level, NA generated.Это имеет смысл, потому что Value по умолчанию является фактором, и у него нет уровней!


Чтобы найти проблему cat / paste0, я подумал, что мне стоит взглянуть поближе на то, чтоэто вы пытались добавить к фрейму данных.Я посмотрел на вашу последнюю строку и запустил это:

class(
  cat(
    "F1:  ",
    format(
      sum(as.numeric(sub(' ','0',(sub(' ','0',substr(z,5,6)))))),
      big.mark=","
    )
  )
)

Вы получите действительно странный ответ:

F1:   33[1] "NULL"

Когда мы делаем то же самое с paste0 вместо catГораздо проще:

[1] "character"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...