Function R存在函数?
您好,我想比较两个目录中的文件:Function R存在函数?,function,r,loops,statistics,Function,R,Loops,Statistics,您好,我想比较两个目录中的文件: allfilenames <- list.files(path="../XYZ") names1=allfilenames[grep("XYZ_*",allfilenames)] numfiles <- length(names1) allfilenames2 <- list.files(path="../ABC") names2=allfilenames2[grep("ABC_*",allfilenames2)] numfiles
allfilenames <- list.files(path="../XYZ")
names1=allfilenames[grep("XYZ_*",allfilenames)]
numfiles <- length(names1)
allfilenames2 <- list.files(path="../ABC")
names2=allfilenames2[grep("ABC_*",allfilenames2)]
numfiles <- length(names2)
for(i in names1){
if(exists(i in names2){...}###?????
else...
}
所有文件名要测试一个字符串是否在另一个字符串中,请使用%
中的%,例如:
names <- c("A", "B", "D")
"A" %in% names
[1] TRUE
"C" %in% names
[1] FALSE
名称不是存在
,而是文件.存在
回应卡斯滕
OP的问题:
是否有另一个函数来查看[]是否有来自某个董事的文件[y]
存在于另一个世界
我答案的扩展版本
file.exists(file.path(some_other_dir, a_file_from_one_directory))
这充分回答了这个问题。与其逐个测试这些file.name向量中的元素,为什么不使用intersect
intersect(names1, names2)
您可以不测试长度为的通用名称(intersect(a,b))==0
Jasmine,首先您可以直接为list.files提供一个模式,而不是使用grep-但在任何情况下,该模式都需要是正则表达式。然后,可以使用集合操作对文件名执行交集、并集或差集操作:
# "^XYZ_" matches strings that START with "XYZ_"
names1 <- list.files("../XYZ", pattern="^XYZ_")
names2 <- list.files("../ABC", pattern="^ABC_")
# The names in both folders
commonNames <- intersect(names1, names2)
# The names only in the first folder
uniqueNames1 <- setdiff(names1, names2)
# The names only in the second folder
uniqueNames2 <- setdiff(names2, names1)
# Loop and process...
for(i in commonNames) {
#...
}
#“^XYZ”匹配以“XYZ”开头的字符串
名称1在索引中,最好使用grepl
而不是'grep。当没有匹配项时,
grep`返回一个空的数值向量,这会导致索引返回所有内容(而不是任何内容)。file.exists
对OP的问题没有帮助。@Karsten:Sigh。是的,你只是缺乏想象力。谢谢你帮助我发挥想象力,我相应地改变了投票方式。也许我应该多睡一会儿
names2 <- grep("^ABC_", allfilenames2, value=TRUE)