【问题标题】:for loop specific file names Rfor循环特定文件名R
【发布时间】:2018-02-28 14:50:18
【问题描述】:

我有一个保存为字符变量 (uid_car) 的标识符列表 我有一个文件列表(file_list),其中一个标识符作为文件名的前缀(例如 1000_*.file)

uid_car

在上面的示例中,我想遍历文件列表并复制前缀包含在 uid_car 中的文件。因此,只会将文件 1000_01.file、1002_01.file 和 1004_01.file 复制到新路径。

下面的 for 循环一直有效,直到您遇到不包含在 uid_car 中的第 i 个元素。

我尝试了一个 mapply 函数,它可能更简洁一些,但没有太多编写这些的经验...任何帮助将不胜感激。

for (i in length_of_file_list) {
  if (startsWith(file_list[i], uid_car[])) {
    file.copy(file_list[i], new_path)
  }
}

【问题讨论】:

    标签: r for-loop nested-loops file-copying


    【解决方案1】:

    如果您确实想循环执行,这可能会满足您的需求:

    uids_to_print <- c("1000", "1001", "1004")
    filenames <-c("1000_01.file","1000_02.file","1001_01.file","1001_02.file","1002_01.file","1002_02.file","1003_01.file","1004_01.file")
    
    
    # Iterate through each filename
    for (filename in filenames) {
    
        # Pull out the characters prior to the first underscore
        filename_uid <- unlist(strsplit(filename, "_"))[1]
    
        # Cheeck if it's in the list of ones to print
        if(filename_uid %in% uids_to_print) {
            # Put file operation inside this loop
    
        }
    }
    

    例如,执行

    for (filename in filenames) {
        filename_uid <- unlist(strsplit(filename, "_"))[1]
        if(filename_uid %in% uids_to_print) {
            print(paste("copy", filename, sep=" "))
        }
    }
    

    产量

    "copy 1000_01.file"
    "copy 1000_02.file"
    "copy 1001_01.file"
    "copy 1001_02.file"
    "copy 1004_01.file"
    

    【讨论】:

    • 非常感谢,这已经奏效了,在 for 循环的最后一部分我使用了 file.copy(paste(filename,sep= " "),new_path)..
    【解决方案2】:

    我认为你不需要循环。

    files.to.copy <- file_list[file_list %in% paste0(uid_car,'_01.file')]
    file.copy(files.to.copy, new_path)
    

    【讨论】:

    • 这可行,但并非所有文件在 uid_car 之后都不包含相同的名称....
    • @e.matt 我明白了。我误解了你想要什么。似乎您已经有了解决方案,但一种快速而肮脏的方法是将我的第一行更改为:files.to.copy &lt;- file_list[substr(file_list,1,4) %in% uid_car]。假设uid_car 中的所有 ID 都是 4 位数。
    • 感谢您的更新,这是一个非常合适的替代方案,因为 ID 的长度为 4 位。
    猜你喜欢
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多