Создать список с определенной итерацией в R - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующий набор данных, содержащий даты:

> dates
 [1] "20180412" "20180424" "20180506" "20180518" "20180530" "20180611" "20180623" "20180705" "20180717" "20180729"

Я пытаюсь создать список, в котором в каждой позиции имя 'Coherence_' + первая и вторая даты в dates. Так что в output1[1] я бы получил Coherence_20180412_20180424. Тогда в output1[2] я бы Coherence_20180506_20180518 и т. Д.

Я начинаю с этого кода, но он не работает так, как мне нужно:

output1<-list()
for (i in 1:5){
  output1[[i]]<-paste("-Poutput1=", S1_Out_Path,"Coherence_VV_TC", dates[[i]],"_", dates[[i+1]], ".tif", sep="")
}

Есть ли у вас какие-либо предложения?

M

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы можете создать эти шаблоны, используя paste возможность работать с векторами:

dates <- c("20180412", "20180424", "20180506", "20180518", "20180530", 
"20180611", "20180623", "20180705", "20180717", "20180729")
paste("Coherence", dates[1:length(dates)-1], dates[2:length(dates)], sep="_")
[1] "Coherence_20180412_20180424" "Coherence_20180424_20180506" "Coherence_20180506_20180518"
[4] "Coherence_20180518_20180530" "Coherence_20180530_20180611" "Coherence_20180611_20180623"
[7] "Coherence_20180623_20180705" "Coherence_20180705_20180717" "Coherence_20180717_20180729"

Или другие простые шаблоны могут быть сгенерированы как:

paste("Coherence", dates[seq(1, length(dates), 2)], dates[seq(2, length(dates), 2)], sep="_")
[1] "Coherence_20180412_20180424" "Coherence_20180506_20180518" "Coherence_20180530_20180611"
[4] "Coherence_20180623_20180705" "Coherence_20180717_20180729"
0 голосов
/ 07 сентября 2018

Вы можете использовать matrix(..., nrow=2):

dates <- c("20180412", "20180424", "20180506", "20180518", "20180530", "20180611", "20180623", "20180705", "20180717", "20180729")
paste0("Coherence_", apply(matrix(dates, 2), 2, FUN=paste0, collapse="_"))
# > paste0("Coherence_", apply(matrix(dates, 2), 2, FUN=paste0, collapse="_"))
# [1] "Coherence_20180412_20180424" "Coherence_20180506_20180518" "Coherence_20180530_20180611" "Coherence_20180623_20180705"
# [5] "Coherence_20180717_20180729"
0 голосов
/ 07 сентября 2018

Попробуйте это: Без петли

even_indexes<-seq(2,10,2) # List of even indexes
odd_indexes<-seq(1,10,2)  # List of odd indexes
print(paste('Coherence',paste(odd_indexes,even_indexes,sep = "_"),sep = "_"))

Ссылка ответа отсюда: Создание списка в R с определенной итерацией

Обновлено (Для получения данных в списке)

lst=c(paste('Coherence',paste(odd_indexes,even_indexes,sep = "_"),sep = "_"))

OR

a=c(1:10)
for (i in seq(1, 9, 2)){
 print(paste('Coherence',paste(a[i],a[i+1],sep = "_"),sep = "_"))
}

Выход:

[1] "Coherence_1_2"
[1] "Coherence_3_4"
[1] "Coherence_5_6"
[1] "Coherence_7_8"
[1] "Coherence_9_10"
...