在R中将一个函数作为另一个函数的参数传递
Passing a function as a parameter of another function in R
我正在尝试编写一个函数来证明 R 中的中心极限定理。它将值 n 和概率密度函数作为参数,returns 是 a 的 1000 个样本的平均值PDF,n次。
所以我有一个 PDF 作为函数,像这样:
pdf1 <- function() {
x = runif(1, min=0, max=2)
if(x <= 1) {
y = x
} else {
y=2-x
}
y
}
我正在尝试将此函数用作我的新函数中的参数,该函数应该 return 来自此 PDF 的 1000 个样本的均值,n 次。
newpdf <- function(n, pdfx) {
array4 <- c()
for(i in 1:n) {
array4 = c(array4, mean(replicate(1000, pdfx)))
}
print(array4)
}
这行不通。它只是 returns 1 值 n 次,像这样:
newpdf(10, pdf1())
[1] 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415
[10] 0.07446415
但是如果我在 PDF 中硬编码,就像这样:
newpdf <- function(n){
array4 <- c()
for(i in 1:n) {
array4 = c(array4, mean(replicate(1000, pdf1())))
}
print(array4)
}
它给了我想要的值..
> newpdf(19)
[1] 0.4924323 0.5007244 0.4935517 0.5070427 0.4882152 0.5006345 0.5080305 0.4992261 0.5106020
[10] 0.5045957 0.5080413 0.5049816 0.5043062 0.4964958 0.4903163 0.5203326 0.5107542 0.5069920
[19] 0.4921472
所以我不确定这里发生了什么。我不知道为什么它不能将 PDF 理解为参数,但是当我对其进行硬编码时它可以理解。
无论如何,如果有人可以帮助阐明这一点,那就太棒了!
调用 newpdf
时不应在 pdf1
后使用括号,因为您传递的是函数名称,而不是调用它。
按照同样的逻辑,你应该在replicate()
.
中使用它们
pdf1 <- function() {
x = runif(1, min=0, max=2)
if(x <= 1) {
y = x
} else {
y=2-x
}
y
}
newpdf <- function(n, pdfx) {
array4 <- c()
for(i in 1:n) {
array4 = c(array4, mean(replicate(1000, pdfx())))
}
print(array4)
}
set.seed(1)
newpdf(19, pdf1)
[1] 0.5027618 0.4827648 0.4943929 0.4750925 0.4948409 0.5177700 0.4982195 0.5003837 0.5011541 0.4884556
[11] 0.5022072 0.4999359 0.4882833 0.4959163 0.5146288 0.4954670 0.5057518 0.5008227 0.5000727
我正在尝试编写一个函数来证明 R 中的中心极限定理。它将值 n 和概率密度函数作为参数,returns 是 a 的 1000 个样本的平均值PDF,n次。
所以我有一个 PDF 作为函数,像这样:
pdf1 <- function() {
x = runif(1, min=0, max=2)
if(x <= 1) {
y = x
} else {
y=2-x
}
y
}
我正在尝试将此函数用作我的新函数中的参数,该函数应该 return 来自此 PDF 的 1000 个样本的均值,n 次。
newpdf <- function(n, pdfx) {
array4 <- c()
for(i in 1:n) {
array4 = c(array4, mean(replicate(1000, pdfx)))
}
print(array4)
}
这行不通。它只是 returns 1 值 n 次,像这样:
newpdf(10, pdf1())
[1] 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415 0.07446415
[10] 0.07446415
但是如果我在 PDF 中硬编码,就像这样:
newpdf <- function(n){
array4 <- c()
for(i in 1:n) {
array4 = c(array4, mean(replicate(1000, pdf1())))
}
print(array4)
}
它给了我想要的值..
> newpdf(19)
[1] 0.4924323 0.5007244 0.4935517 0.5070427 0.4882152 0.5006345 0.5080305 0.4992261 0.5106020
[10] 0.5045957 0.5080413 0.5049816 0.5043062 0.4964958 0.4903163 0.5203326 0.5107542 0.5069920
[19] 0.4921472
所以我不确定这里发生了什么。我不知道为什么它不能将 PDF 理解为参数,但是当我对其进行硬编码时它可以理解。 无论如何,如果有人可以帮助阐明这一点,那就太棒了!
调用 newpdf
时不应在 pdf1
后使用括号,因为您传递的是函数名称,而不是调用它。
按照同样的逻辑,你应该在replicate()
.
pdf1 <- function() {
x = runif(1, min=0, max=2)
if(x <= 1) {
y = x
} else {
y=2-x
}
y
}
newpdf <- function(n, pdfx) {
array4 <- c()
for(i in 1:n) {
array4 = c(array4, mean(replicate(1000, pdfx())))
}
print(array4)
}
set.seed(1)
newpdf(19, pdf1)
[1] 0.5027618 0.4827648 0.4943929 0.4750925 0.4948409 0.5177700 0.4982195 0.5003837 0.5011541 0.4884556
[11] 0.5022072 0.4999359 0.4882833 0.4959163 0.5146288 0.4954670 0.5057518 0.5008227 0.5000727