R疑难解答脚本,为什么为NULL

时间:2019-05-30 16:25:26

标签: r

我尝试处理大文件以按偏移位置获取总计的序列,所有单项都可以,但是我需要将结果写入文件中,为了获得更多技能,本练习我首先尝试将其全部放入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 个答案:

答案 0 :(得分:2)

我相信,两项更改将修复您的代码。

首先,使用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"