当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R Vectorize 向量化标量函数


R语言 Vectorize 位于 base 包(package)。

说明

Vectorize 创建一个函数包装器,向量化其参数 FUN 的操作。

用法

Vectorize(FUN, vectorize.args = arg.names, SIMPLIFY = TRUE,
          USE.NAMES = TRUE)

参数

FUN

要应用的函数,通过 match.fun 找到。

vectorize.args

应向量化的参数的字符向量。默认为 FUN 的所有参数。

SIMPLIFY

逻辑或字符串;尝试将结果简化为向量、矩阵或更高维数组;请参阅 sapplysimplify 参数。

USE.NAMES

逻辑性;如果第一个 ... 参数有名称,则使用名称,或者如果它是字符向量,则使用该字符向量作为名称。

细节

Vectorizevectorize.args 参数中指定的参数是 ... 列表中传递给 mapply 的参数。只有真正通过的才会被向量化;默认值不会。请参阅示例。

Vectorize 不能与基元函数一起使用,因为它们没有 formals 的值。

它也不能与具有名为 FUNvectorize.argsSIMPLIFYUSE.NAMES 参数的函数一起使用,因为它们会干扰 Vectorize 参数。请参阅下面的 combn 示例了解解决方法。

FUN 具有相同参数的函数,包装对 mapply 的调用。

例子

# We use rep.int as rep is primitive
vrep <- Vectorize(rep.int)
vrep(1:4, 4:1)
vrep(times = 1:4, x = 4:1)

vrep <- Vectorize(rep.int, "times")
vrep(times = 1:4, x = 42)

f <- function(x = 1:3, y) c(x, y)
vf <- Vectorize(f, SIMPLIFY = FALSE)
f(1:3, 1:3)
vf(1:3, 1:3)
vf(y = 1:3) # Only vectorizes y, not x

# Nonlinear regression contour plot, based on nls() example
require(graphics)
SS <- function(Vm, K, resp, conc) {
    pred <- (Vm * conc)/(K + conc)
    sum((resp - pred)^2 / pred)
}
vSS <- Vectorize(SS, c("Vm", "K"))
Treated <- subset(Puromycin, state == "treated")

Vm <- seq(140, 310, length.out = 50)
K <- seq(0, 0.15, length.out = 40)
SSvals <- outer(Vm, K, vSS, Treated$rate, Treated$conc)
contour(Vm, K, SSvals, levels = (1:10)^2, xlab = "Vm", ylab = "K")

# combn() has an argument named FUN
combnV <- Vectorize(function(x, m, FUNV = NULL) combn(x, m, FUN = FUNV),
                    vectorize.args = c("x", "m"))
combnV(4, 1:4)
combnV(4, 1:4, sum)

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Vectorize a Scalar Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。