错误:维数不正确

Error in : incorrect number of dimensions

我写了一个代码来对我的大数据集进行排序。我针对一个文件(例如 "K_7-1_0H.TXT")测试了我的代码,它运行良好,没有任何警告和错误消息。我得到了我想要的正确 .csv 文件。但是当我运行循环的时候,报错信息来了:

Error in `[.default`(data, 1, ) : incorrect number of dimensions 

这是我的代码:

kcl <- list.files(pattern = "K_.*\.TXT",recursive = TRUE)
c <- c(0, 0.001,0.01,0.05,0.25,0.5,1.0,1.5,2.0,2.5,3.0,3.4)
Kconc. <- rep(c,each=8)
for (i in kcl) {
  data <- read.csv(i,header=FALSE,sep = ",")
  data <- data[-c(1:14),] #delete noise info
  colnames(data) <- as.character(unlist(data[1,])) #add column name
  data <- data[-1,]
  data <- data[,-1]
  #change cell number and sort
  data$`Well Label` <- as.character(data$`Well Label`)
  data[1,1] <- "T01"
  data[12,1] <- "T02"
  ...
  data[89,1] <- "T09"
  data <- arrange(data, `Well Label`) #sort according to table number
  data <- data[-1,] #delete noise info
  data <- cbind(data,Kconc.)
  j <- sub("\.[[:alnum:]]+$","",i) #grep the isolate name without the extention
  write.csv(data, paste0(j,".csv"))
}

这里是列表内容

> kcl
 [1] "K_10-1_0.TXT" "K_10-3_0.TXT"
 [9] "K_10-3_6.TXT" "K_10-3_7.TXT" "K_11-1_8.TXT"
[17] "K_11-2_0.TXT" "K_11-3_8.TXT"
[25] "K_7-1_0H.TXT" "K_7-3_82.TXT" "K_8-1_0H.TXT" "K_8-1_60.TXT" "K_8-1_72.TXT" "K_8-1_84.TXT"
[49] "K_9-1_0Z.TXT" "K_9-1_60.TXT" "K_9-1_72.TXT" "K_9-1_84.TXT" "K_9-2-84.TXT" 

当我检查我的文件时,创建了像 "K_10*.csv" 和 "K_11*.csv" 这样的文件,我得到了我想要的,但是像 "K_7*.TXT"、"K_8*.TXT" 和 "K_9*.TXT" 根本不起作用,这意味着我什至没有为这些文件创建 .csv。

我不太理解错误消息以及为什么该代码仅适用于某些文件。有人可以帮助我吗?


编辑: 输入并期待输出
输入是 .txt 文件,如下所示:

[Assay],C:\REVEL0-S.ASY
"Assay title",Untitled Assay
"Read Time",11.04.17,13:04:00
"Operator",
"Comments",
"Kit Lot Number",,
"Wells",A1 - H12
OD RESULTS
"Units",OD

[Results],Results are sorted on Sample ID,in ascending order

"Sample ID","Well Label","OD Results"
"T1","T1",0.045
"T10","T10",0.044
"T11","T11",0.045
"T2","T2",0.045

预期输出:

    Well Label  OD Results  Hconc.
2   T01 0.189   0
3   T02 0.11    0
4   T03 0.151   0
5   T04 0.053   0

试试这个例子:

library(dplyr)

# skip info rows
df1 <- read.csv("test.txt", skip = 12, stringsAsFactors = FALSE)
Kconc <- c(0, 0.001,0.01,0.05,0.25,0.5,1.0,1.5,2.0,2.5,3.0,3.4)

# Prerix with zero, e.g.: T1 to T01, then sort
res <- 
  df1 %>% 
  transmute(
    `Well Label` = if_else(nchar(df1$Sample.ID) == 2,
                           paste0(substr(df1$Sample.ID, 1, 1),
                                  0,
                                  substr(df1$Sample.ID, 2, 3)),
                           df1$Sample.ID),
    `OD Results` = OD.Results) %>% 
  arrange(`Well Label`)
res
#   Well Label OD Results
# 1        T01      0.045
# 2        T02      0.045
# 3        T10      0.044
# 4        T11      0.045

然后 cbind Kconc,不需要 rep 因为它会回收。在此示例中,我们只有 4 行,因此要获得此示例的正确结果,我们需要使用 res <- cbind(res, Kconc[1:4]).

res <- cbind(res, Kconc)

另外,从 gtools 中了解自然顺序:

  df1[ gtools::mixedorder(df1$Sample.ID), ]
#   Sample.ID Well.Label OD.Results
# 1        T1         T1      0.045
# 4        T2         T2      0.045
# 2       T10        T10      0.044
# 3       T11        T11      0.045

test.txt

[Assay],C:\REVEL0-S.ASY
"Assay title",Untitled Assay
"Read Time",11.04.17,13:04:00
"Operator",
"Comments",
"Kit Lot Number",,
"Wells",A1 - H12
OD RESULTS
"Units",OD

[Results],Results are sorted on Sample ID,in ascending order

"Sample ID","Well Label","OD Results"
"T1","T1",0.045
"T10","T10",0.044
"T11","T11",0.045
"T2","T2",0.045