R在使用循环时访问列表的第一个元素并将其附加到向量中

R Access first element of the list while using loop and append it into a vector

我有一个函数可以给出如图所示的结果。

List of 3
 $ D1: num 0.0509
 $ D2: num 0.0536
 $ D : num 0.0523

我想访问列表的第一个元素,并将所有值放入一个向量中。它以下列方式循环遍历数据。 Vector1 和 Vector2 有大约 100 个数据。

数据样本

vector1=c(1213, 57683, 74466, 44419, 17481, 3403, 42252, 7045,29445, 15004, 21337, 1892, 21861, 238, 26574, 17579)

vector2=c(3185, 29692, 12570, 26081, 4992, 1659, 16592, 1748, 37583, 6751, 10188, 355, 8116, 9, 5064, 1846)

它以下列方式循环遍历数据。

w<-2
ab <- c()
for (i in w:length(vector1)){
  pred[[count]] <- vector1[(i-w+1):i]
  obs[[count]] <- vector2[(i-w+1):i]
  
  a1 <- pred[count]
  a2<- obs[count]
  count = count + 1
  klvalue(unlist(a1),unlist(a2))
  a1 <- list()
  a2<- list()
  kldta<-append(klvalue,ab) 
}

功能如图

klvalue<- function(a,b){kl.dist(a, b, base = exp(1))
  }      #kl.dist is from library(seewave)

我知道我可以通过 klvalue[[1]] 访问最后的数据,但我不太确定如何在循环中执行它。

我可能理解错了,但这是你想要的结果吗?

#install.packages("seewave")
library(seewave)

klvalue<- function(a,b){kl.dist(a, b, base = exp(1))
}      #kl.dist is from library(seewave)

vector1=c(1213, 57683, 74466, 44419, 17481, 3403, 42252, 7045,29445, 15004, 21337, 1892, 21861, 238, 26574, 17579)
vector2=c(3185, 29692, 12570, 26081, 4992, 1659, 16592, 1748, 37583, 6751, 10188, 355, 8116, 9, 5064, 1846)

w<-2
ab <- list()
pred <- list()
obs <- list()
count <- 1
kldta <- list()

for (i in w:length(vector1)){
  pred[[count]] <- vector1[(i-w+1):i]
  obs[[count]] <- vector2[(i-w+1):i]
  
  a1 <- pred[count]
  a2 <- obs[count]
  count <- count + 1
  klval <- klvalue(unlist(a1),unlist(a2))
  kldta[i] <- klval[[1]]
}

kldta_final <- unlist(kldta)
kldta_final
#>  [1] 0.0475256543 0.1523148191 0.1896899344 0.0468433690 0.0219116189
#>  [6] 0.0017162112 0.0115640592 0.1471657288 0.1053351614 0.0004260342
#> [11] 0.0253701967 0.0141622162 0.0148801420 0.0072153100 0.0403388718

reprex package (v2.0.1)

创建于 2022-05-31