我编写了一个模拟函数,它输出了100个元素的向量,我想使用*apply
函数多次运行该函数并将重复的输出存储在一个新的向量中每次模拟运行。
该功能如下:
J <- c(1:100)
species_richness <- function(J){
a <- table(J)
return(NROW(a))
}
simulation <- function(J,gens,ploton=FALSE,v=0.1){
species_richness_output <- rep(NA,gens)
for(rep in 1:gens){
index1 <- sample(1:length(J),1)
if(runif(1,0,1) < v){
J[index1] <- (rep+100)
}
else{
index2 <- sample(1:length(J),1)
while(index1==index2) {
index2 <- sample(1:length(J),1)
}
J[index1] <- J[index2]
}
species_richness_output[rep] <- species_richness(J)
}
species_abundance <- function(J){
a <- table(J)
return(a)
}
abuntable <- species_abundance(J)
print(abuntable)
octaves <- function(abuntable){
oct <- (rep(0,log2(sum(abuntable))))
for(i in 1:length(abuntable)){
oct2 <- floor(log2(abuntable[i])+1)
oct[oct2] <- oct[oct2]+1
}
print(oct)
}
# octaves(c(100,64,63,5,4,3,2,2,1,1,1,1))
if(ploton==TRUE){
hist(octaves(abuntable))
}
print(species_richness(J))
return(J)
}
simulation(J, 10000,TRUE,v=0.1)
所以这是我的函数,它需要J我之前定义的向量,操纵它,然后返回: 新模拟的矢量J为100个元素 一个称为八度的函数,用于对新向量进行分类 对应于上述“八度音阶”的直方图
我尝试了多种变体:使用lapply
,mapply
放args=args_from_original_simulation
simulation_repeated <- c(mapply(list, FUN=simulation(args),times=10000))
但是我一直在使用mapply函数的match.fun部分出错
Error in match.fun(FUN) :
'simulation(J, 10000, FALSE, 0.1)' is not a function, character or symbol
尽管我写的模拟显示为在工作区中保存为函数。
有谁知道这个错误指向的是什么?
答案 0 :(得分:1)
在这一行:
simulation_repeated <- c(mapply(list, FUN=simulation(args),times=10000))
你没有赋予mapply功能。您(基本上)传递调用simulation(args)
的结果,simulation
不返回函数。