當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。