在R中创建具有特定迭代的列表

问题描述 投票:0回答:3

我有以下包含日期的数据集:

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

你有什么建议吗?

中号

r list loops for-loop iteration
3个回答
1
投票

试试这个:没有循环

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 = "_"))

链接答案从这里:Create list in R with specific iteration

更新(获取列表中的数据)

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

要么

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"

1
投票

您可以使用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
投票

你可以使用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"
© www.soinside.com 2019 - 2024. All rights reserved.