r - 评估积分的代码:从 Matlab 转换为 R
问题描述
考虑以下 Matlab 代码来使用模拟来近似积分。
function f
numSim = 1000000;
points = rand(numSim,1);
r3 = mean(feval('func3', points));
points1 = rand(numSim,1);
r8 = mean(feval('func8', points, points1));
disp([r3, r8,]);
end %f
%%%%%%%%%% Nested funcitons %%%%%%%%%%%%
function y = func3(x)
y = exp(exp(x));
end %func3
function z = func8(x,y)
z = exp((x+y).^2);
end %func8
我在 R中尝试过的
f <- function (func3,func8){
numSim <- 1000000
points <- runif(numSim)
r3 <- mean(evaluate(points, func3))
points1 <- runif(numSim)
r8 <- mean(evaluate( points1,func8))
newList<-list(r3,r8)
return(newList)
}
# Nested functions
func3<-function(x) {
func3 <- exp(exp(x))
return(func3)
}
func8 <- function(x,y) {
func8<-exp((x+y)^2)
return(func8)
}
第一个问题是一条警告信息:
在 mean.default(evaluate(points,function)) 中:参数不是数字或逻辑:返回 NA
我添加了r3 <- mean(evaluate(points, func3),na.rm=TRUE)
当我输入 r3 时,输出为 [1] NA,
为什么它不能正常工作?
此外,有一条关于-嵌套函数-的评论,我不明白如何在 R 中做到这一点。
解决方案
这似乎有效:
f <- function (func3,func8){
numSim <- 1000000
vals <- runif(numSim) ## changed the name: 'points' is a built-in function
r3 <- mean(sapply(vals, func3))
vals2 <- runif(numSim)
## use mapply() to evaluate over multiple parameter vectors
r8 <- mean(mapply(func8, vals, vals2))
newList <- list(r3,r8)
return(newList)
}
我简化了函数定义。
func3 <- function(x) {
return(exp(exp(x)))
}
func8 <- function(x,y) {
return(exp((x+y)^2))
}
试试看:
f(func3,func8)
我不知道这是否正确,但我认为这是对您的 MATLAB 代码的正确翻译。请注意,使用向量化可以更快地实现:分别用and替换sapply()
and (这仅在要评估的函数本身被适当地向量化时才有效,在这种情况下就是这样)。mapply()
mean(func3(vals))
mean(func8(vals,vals2))
推荐阅读
- wordpress - Wordpress /Cloudflare(完整 SSL)的这个 GTmetrix SSL 错误是什么意思?
- laravel - 如何解决 Laravel6 中的控制器错误?
- vba - 通过 VBA 检查文件是否存在于 OneDrive 中
- python - 如何在 django 中获取 updateview 的 url 参数?
- python-3.x - 是什么导致 Windows 的 vscode 中的 hello.py 出现此错误:“-bash: C:/Python37/python.exe: No such file or directory”?
- django - Django我如何进行内部连接
- flutter - 如何防止 SliverAppBar 淡出背景图片?
- python - 如何更改for循环中的变量?
- visual-studio-code - 禁用 VS Code 警告“不会自动打开的子模块”
- javascript - 如何将此 javascript 片段放入functions.php?