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