【问题标题】:Name output from a for loop using a list in R使用 R 中的列表命名 for 循环的输出
【发布时间】:2016-10-12 16:11:23
【问题描述】:

我有一个录音列表,我正在使用 for 循环来读入、剪辑、重命名和写出。我正在尝试使用关联的“主”表中的随机数重命名剪辑,以便可以在随机盲研究中使用这些剪辑。

下面的代码可以根据需要使用sample(100:999,1) 代替下面三个波浪号 (~~~) 之间的代码(它不会运行,但希望能显示所需的结果),但出现的可能性很小获取重复的剪辑 ID。如何让每个循环迭代的输出由其对应的 ID 命名?

recording_list <- recording_summary$Original_filename # chr [1:100]
clipID_list <- recording_summary$ClipID # int [1:100]

for (i in c(recording_list)){
  wavIN <- readWave(i, from=120, to=301, units="seconds")
  writeWave(wavIN, paste0(~~~i in c(clipID_list)~~~, ".wav"))
  rm(wavIN)
}

【问题讨论】:

    标签: r list for-loop output


    【解决方案1】:

    当我沿着多个变量移动时,我倾向于使用索引(或名称)来代替。这应该适合你:

    recording_list <- recording_summary$Original_filename # chr [1:100]
    clipID_list <- recording_summary$ClipID # int [1:100]
    
    for (idx in 1:length(recording_list)){
      wavIN <- readWave(recording_list[idx], from=120, to=301, units="seconds")
      writeWave(wavIN, paste0(clipID_list[idx], ".wav"))
      rm(wavIN)
    }
    

    【讨论】:

      【解决方案2】:

      为每次迭代预填充 ID/名称列表

      # Generate a list of 100 unique random integers between 100 and 999
      name_list = sample(100:999, 100)
      
      # Largely the same code from your post
      for (i in seq_along(recording_list)) {
        wavIN <- readWave(recording_list[i], from=120, to=301, units="seconds")
        writeWave(wavIN, paste0(name_list[i], ".wav"))
        rm(wavIN)
      }
      
      # Write list of file name and recording_list pairs for safe keeping.
      cbind(recording_list, name_list)
      

      【讨论】:

      • 感谢您的解决方案——我选择了另一个答案,因为它提供了有关索引方法的有用信息,但这也很有效。
      猜你喜欢
      • 2017-05-14
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2021-10-30
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多