使用R中的列表从for循环中输出名称

时间:2016-10-12 16:11:24

标签: r list for-loop output

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

下面的代码可以根据需要使用sample(100:999,1)代替下面的三个代字号(~~~)之间的代码(它不会运行,但希望显示所需的结果),但是获得重复的clipID的可能性很小。如何通过相应的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)
}

2 个答案:

答案 0 :(得分:0)

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

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)
}

答案 1 :(得分:0)

预先填充每次迭代的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)