您似乎对函数声明感到困惑。您的函数看起来好像应该采用 4 个参数(i、s、位置和形状)。但是,在函数内部,这些输入从未使用过——它们都是根据cvsq 的值从头开始创建的。因此,它们作为函数的输入是多余的。
在您的lapply 中,您将值seq(5,60,5) 传递给您的函数,但是如果每次函数执行时都重新计算变量i、s、位置和形状,则不清楚这些值是什么叫。你希望你的函数用这些数字做什么?
我的猜测是你想将一个数字输入你的函数并让它改变这些变量。如果是这样,作为单个参数传递的唯一变量是cvsq,因为更改cvsq 会更改所有其他变量的值。如果这是错误的,那么就不清楚您要做什么。
如果我在正确的轨道上,您的代码将如下所示:
myfxn <- function(cvsq)
{
i <-seq(5,60,5)
s <-i*cvsq
location <- log(i^2 / sqrt(s^2 + i^2))
shape <- sqrt(log(1 + (s^2 / i^2)))
rlnorm(n = 10000, location, shape)
}
my_cvsq <- seq(5, 60, 5)
df <- as.data.frame(do.call(cbind, lapply(my_cvsq, myfxn)))
head(df)
#> V1 V2 V3 V4 V5 V6 V7
#> 1 0.1786204 1.2587228 0.04588056 1.1925041 0.01985825 0.6924621 0.0008467456
#> 2 28.6147331 0.1243106 0.08306054 0.5057983 4.65819135 3.0851280 0.0429381886
#> 3 0.6666314 0.5546972 2.83435439 0.6512173 0.04994503 6.4365528 0.3779170170
#> 4 7.7163909 4.5954509 0.26637679 0.4085584 3.31589074 0.4894957 1.5195320720
#> 5 1.0931151 0.0575365 0.80689457 0.5033203 1.35200408 0.1427171 2.4058576253
#> 6 0.2573164 7.6190362 1.01222386 1.8598690 5.91525940 0.5600217 0.7858050404
#> V8 V9 V10 V11 V12
#> 1 1.263350450 0.09485695 0.02615021 0.331885430 2.9109114
#> 2 0.004408080 0.14120821 0.05990997 0.053248650 0.1013357
#> 3 0.888602537 1.32448399 1.17625454 0.766153864 0.0196438
#> 4 5.254249758 0.01337194 0.08463637 2.996341976 0.8942556
#> 5 0.004375628 0.05052838 0.51024824 0.533356862 1.6166927
#> 6 0.985499853 0.09939285 0.86272478 0.001223073 1.0652496
我们可以通过绘制它们的密度来查看您的 12 个样本的样子:
d <- density(df[,1], from = 0, to = 10)
plot(d$x, d$y, type = "l", xlim = c(0, 10), ylim = c(0, 0.7))
for(i in 2:12){
d <- density(df[,i], from = 0, to = 10)
lines(d$x, d$y, col = i)
}
由reprex package (v0.3.0) 于 2020 年 7 月 11 日创建