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
我有一个函数可以给出如图所示的结果。
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