我有几个遥测对象,其中包含按年份过滤的动物跟踪数据。我还创建了一个包含所有这些遥测对象的列表。我目前有一个循环函数,可以计算并绘制给定遥测对象中每个个体的变异函数。我现在想做的是把我的变差函数循环变成一个函数,我可以应用到遥测对象的列表,它将计算变差函数并创建新的列表我的每个遥测对象的对象。
下面是一个使用ctmm包中的跟踪数据的最小工作示例:
library(ctmm)
library(ggplot2)
library(dplyr)
library(stringr)
library(lubridate)
library(sf)
library(tidyverse)
library(sp)
library(scales)
library(tidyr)
library(tibble)
data("buffalo")
Cilla <- as.data.frame(buffalo$Cilla)
Cilla$id<-"Cilla"
Gabs<-as.data.frame(buffalo$Gabs)
Gabs$id<-"Gabs"
Mvubu<-as.data.frame(buffalo$Mvubu)
Mvubu$id<-"Mvubu"
Pepper<-as.data.frame(buffalo$Pepper)
Pepper$id<-"Pepper"
Queen<-as.data.frame(buffalo$Queen)
Queen$id<-"Queen"
Toni<-as.data.frame(buffalo$Toni)
Toni$id<-"Toni"
buffalo2 <- rbind(Cilla,Gabs,Mvubu,Pepper,Queen,Toni)
buffalo2$Year<-year(buffalo2$timestamp)
buffalo2$Year<-as.factor(buffalo2$Year)
buffalo2$UTM.zone<-"12 +datum=NAD27"
buffalo2$timestamp <- ymd_hms(buffalo2$timestamp)
buffalo2$Timestamp<-buffalo2$timestamp
buffalo2 <- separate(buffalo2, timestamp, c("date","time"), sep= " ",
remove= TRUE, extra= "merge")
buffalo2 <- buffalo2[, c(8,9,1,2,6,7,11,10)]
data2005<-buffalo2 %>%
filter(Year==2005)
data2006<-buffalo2 %>%
filter(Year==2006)
Tdata2005<-as.telemetry(data2005, timeformat="auto",timezone="UTC",
timeout=Inf,datum="NAD27",
na.rm="row",mark.rm=FALSE,keep=FALSE,drop=FALSE)
Tdata2006<-as.telemetry(data2006, timeformat="auto",timezone="UTC",
timeout=Inf,datum="NAD27",
na.rm="row",mark.rm=FALSE,keep=FALSE,drop=FALSE)
Tdata<-list(Tdata2005,Tdata2006)
names(Tdata)<-c("Tdata2005","Tdata2006")
#Variogram loop
SVF <- function(x, date) {
SVF <- list()
for (i in 1:length(x)) {
SVF[[i]] <- variogram(x[[i]])
plot(SVF[[i]], main = paste(names(x[i]), "(", date, ")"))
}
}
#Applying the variogram function to the list of dataframes with dates
Years<-c("2005","2006")
lapply(seq_along(Tdata), function(i) SVF(Tdata[[i]], Years[i]))
到目前为止,我的函数能够计算和绘制Tdata列表中两个遥测对象(Tdata 2005和Tdata 2006)中个体的变差图。接下来我想做的是找出一种方法,将每个年度遥测对象的变差图保存为列表,最好是每年单独的列表(例如:Variogramms_Tdata2005和Variogramms_Tdata2006)。有没有任何方法可以让我编辑我的代码来使这个工作?谢谢!
1条答案
按热度按时间30byixjq1#
根据我的理解,你可以调整函数来计算(仅)变异函数,然后为列表中的每个元素(对应于一年)导出包含不同变异函数的列表,如下所示: