read.table,diff和intersect错误

时间:2015-09-15 15:35:59

标签: r diff intersect read.table write.table

我编写了一个脚本来从磁盘读取文件并检查其中的值并在磁盘上写入其他3个文件。不幸的是,似乎非常直接的事情让人头疼。代码是:

    salt '*' state.highstate pillar='{"update_archive_name":     "new_archive_name.zip"}'

文件" lista_de_codnegs.txt"其中包含以下值:

" PDGR3" " PETR3" " PETR4"

正如所料,文件" lista_de_codnegs_lidos.txt"在一列中返回适当的值,意思是" PDGR3"," PETR3"和#34; PETR4"。

但是,主要问题是:

  1. 文件" lista_de_codnegs_negativos.txt"返回" ABC"," A1B2"," PETR3",但它应该返回" ABC"和" A1B2",仅。

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

  3. 我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的问题就在这里,正如@Heroka将Arqcodnegs更改为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)