[英]Writing a function in R that uses vector operations so it can be applied to a vector
我正在教一个由一群完整的 R 初学者组成的课程。 我们遇到了绘制一个函数的任务,该函数接受一个向量和一个标量,并用它进行一些复杂的计算。 我把它简化为这个,这是让我很难过的部分:
myfun <- function(xs, mu){
sum((xs - mu)^2)
}
我喜欢这种定义函数的方式,因为它非常简单,并且直接对应我们正在绘制的函数定义中实际使用的数学 sigma 表示法。 当我应用于向量和标量时,该函数工作正常: myfun(c(1, 2, 3), 5)
问题是,当我尝试绘制它(作为 mu 的函数)时,它将应用于向量。 然后总和中的减法得到完全不同的含义,整个事情都失败了,情节最终完全不正确。
我可以通过定义这样的函数来修复它:
myfun <- function(xs, mu){
sapply(mu, function(x) {sum((xs - x)^2)})
}
或者,使用purrr
,稍微短一些
myfun <- function(xs, mu){
map_dbl(mu, ~sum((xs - .x)^2))
}
这两者都在函数定义中出现的简单求和之上增加了一层额外的复杂性。
我的问题是:定义这样的函数的最简单、最容易解释的方法是什么,以便它可以使用 ggplot2(实际上是 ggformula)很好地绘制?
myfun_v <- Vectorize(myfun)
这将为您提供该函数的矢量化版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.