0

我编写了一个脚本来从磁盘读取文件并检查其中的值并在磁盘上写入 3 个其他文件。不幸的是,看起来很直截了当的事情却让人头疼。代码是:

Arqcodnegs ="result/lista_de_codnegs.txt"
dirout   = "./result/"
Codnegs_fornecidos = c("ABC", "A1B2", "PETR3")

Verifica_codneg = function (Codnegs_fornecidos, Arqcodnegs) {

  if (!file.exists(Arqcodnegs)) {
    stop("Falta arquivo lista_de_codnegs.txt")
  }

  Codnegs_lidos = read.table(Arqcodnegs,header=FALSE, sep='\t', quote='\"', stringsAsFactors=TRUE)

  Codnegs_negativos = c(setdiff (Codnegs_fornecidos, Arqcodnegs))

  Codnegs_positivos = c(intersect (Codnegs_fornecidos, Arqcodnegs))

  write.table(Codnegs_lidos, paste(dirout, "lista_de_codnegs_lidos.txt", sep=''), col.names=FALSE, row.names=FALSE, sep='\t')

  write.table(Codnegs_negativos, paste(dirout, "lista_de_codnegs_negativos.txt", sep=''), col.names=FALSE, row.names=FALSE, sep='\t')

  write.table(Codnegs_positivos, paste(dirout, "lista_de_codnegs_positivos.txt", sep=''), col.names=FALSE, row.names=FALSE, sep='\t')

}

文件“lista_de_codnegs.txt”包含以下值:

“PDGR3” “PETR3” “PETR4”

正如预期的那样,文件“lista_de_codnegs_lidos.txt”在一列中返回适当的值,表示“PDGR3”、“PETR3”和“PETR4”。

但是,主要问题是:

  1. 文件“lista_de_codnegs_negativos.txt”返回“ABC”、“A1B2”、“PETR3”,但它应该只返回“ABC”和“A1B2”。

  2. 文件“lista_de_codnegs_positivos.txt”不返回任何值,但它应该返回“PETR3”。

我究竟做错了什么?

4

1 回答 1

0

正如@Heroka Change Arqcodnegsto所提到的,您的问题就在这里,它将像引用文件路径的字符串Codnegs_lidos 一样正常运行。Arqcodnegs因此,setdiff()正在寻找字符串和对象之间的区别Codnegs_fornecidos

  Codnegs_negativos = c(setdiff (Codnegs_fornecidos, Arqcodnegs))

  Codnegs_positivos = c(intersect (Codnegs_fornecidos, Arqcodnegs))

**编辑:这段代码应该得到你所追求的。

Arqcodnegs ="result/lista_de_codnegs.txt"
dirout   = "./results/"
dir.create(dirout)
Codnegs_fornecidos = c("ABC", "A1B2", "PETR3")

Verifica_codneg = function (Codnegs_fornecidos, Arqcodnegs) {


  Codnegs_lidos = read.table(Arqcodnegs,header=FALSE, sep='\t', quote='\"', stringsAsFactors=TRUE)

  Codnegs_negativos = c(setdiff (Codnegs_fornecidos, Codnegs_lidos))

  Codnegs_positivos = c(intersect (Codnegs_fornecidos, Codnegs_lidos))

  write.table(Codnegs_lidos, paste(dirout, "lista_de_codnegs_lidos.txt", sep=''), col.names=FALSE, row.names=FALSE, sep='\t')

  write.table(Codnegs_negativos, paste(dirout, "lista_de_codnegs_negativos.txt", sep=''), col.names=FALSE, row.names=FALSE, sep='\t')

  write.table(Codnegs_positivos, paste(dirout, "lista_de_codnegs_positivos.txt", sep=''), col.names=FALSE, row.names=FALSE, sep='\t')

}

Verifica_codneg(Codnegs_fornecidos = Codnegs_fornecidos, Arqcodnegs = Arqcodnegs)
于 2015-09-15T16:02:28.653 回答