데이터 프레임에서 1 ~ 10 행의 무작위 샘플을 취하여 그 무작위 샘플링을 5 번 복제하고 각각의 무작위 샘플에 대한 네트워크 메트릭 (연결)을 계산하는 코드가 있습니다. 그러나이 코드는 데이터 프레임의 "사이트"및 "방법"의 각 수준에서 별도로 실행하고 싶습니다.데이터 프레임의 다른 요인 레벨을 반복
사이트 및 방법별로 데이터 프레임 (df)을 분할하고 각 하위 집합에서 아래 코드를 실행 한 다음 모든 출력을 "site", "method", "size"열이있는 단일 파일로 반환합니다. (샘플링 된 행 수) 및 "연결"?
df <- read.table(text = "bird_sp plant_sp value site method
1 species_a plant_a 1 a m
2 species_a plant_a 1 a m
3 species_b plant_b 1 a m
4 species_b plant_b 1 a m
5 species_c plant_c 1 a m
6 species_a plant_a 1 b m
7 species_a plant_a 1 b m
8 species_b plant_b 1 b m
9 species_b plant_b 1 b m
10 species_c plant_c 1 b m
11 species_a plant_a 1 a f
12 species_a plant_a 1 a f
13 species_b plant_b 1 a f
14 species_b plant_b 1 a f
15 species_c plant_c 1 a f
16 species_a plant_a 1 b f
17 species_a plant_a 1 b f
18 species_b plant_b 1 b f
19 species_b plant_b 1 b f
20 species_c plant_c 1 b f", header = TRUE)
#make sample function
sample_fun <- function(x,size){
rows <- sample(1:nrow(x),size,replace=FALSE)
intlist <- x[rows,]
return(intlist)
}
#convert list to interaction matrix
make_mat <- function(x){
mat <- with(x,tapply(value, list(plant_sp, bird_sp), sum))
mat[is.na(mat)] <- 0
return(mat)
}
#create vector with required sample size and replication
size_vector <- rep(1:10,5)
#use vector to generate list of interactions
samples_Data <- lapply(size_vector, function(x) sample_fun(df,x))
output <- lapply(samples_Data, function(x)
make_mat(x))
library(bipartite)
#calculate connectance on each element (matrix) in output list
#ignore warnings
metrics <- lapply(output, networklevel, index=c("connectance"))
met <- data.frame(unlist(metrics))
names(met) <- names(metrics[[1]])
#Add number of interactions sampled
met$size <- size_vector