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)