read.table、差异和相交错误
read.table, diff and intersect error
我编写了一个脚本来从磁盘读取文件并检查其中的值,然后在磁盘上写入 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" returns 适当的值在一列中,意思是 "PDGR3"、"PETR3" 和 "PETR4"。
但是,主要问题是:
文件 "lista_de_codnegs_negativos.txt" returns "ABC", "A1B2", "PETR3", 但它应该返回 "ABC" 和 "A1B2",仅。
文件"lista_de_codnegs_positivos.txt"returns没有值,但它应该返回"PETR3"。
我做错了什么?
如@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)
我编写了一个脚本来从磁盘读取文件并检查其中的值,然后在磁盘上写入 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" returns 适当的值在一列中,意思是 "PDGR3"、"PETR3" 和 "PETR4"。
但是,主要问题是:
文件 "lista_de_codnegs_negativos.txt" returns "ABC", "A1B2", "PETR3", 但它应该返回 "ABC" 和 "A1B2",仅。
文件"lista_de_codnegs_positivos.txt"returns没有值,但它应该返回"PETR3"。
我做错了什么?
如@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)