簡體   English   中英

如何同時使用sapply並應用於縮短R中的乘法函數

[英]How to simultaneously use sapply and apply to shorten a multiplicative function in R

我想知道如何同時使用sapplylapply以便我可以避免編寫我的函數GG因為它出現在下面?

GG = function(x, y) dnorm(250, mean = x, sd = y)*dnorm(265, mean = x, sd = y) *
                    dnorm(259, mean = x, sd = y)

PS我知道如果我上面的函數中只有x變化,以下可能有效:

     function(x) sapply(lapply(x, dnorm, x = c(250, 265, 259), 10), prod)

但就我而言, xy都有所不同。

我們可以使用base R Map with Reduce 使用Map的原因是函數可以應用於傳遞給它的對象的相應元素。 這里, dnorm是將'x'和'y'的每個對應元素作為meansd參數的函數,而它具有常數向量“x”( c(250, 265, 259) )。 Map的輸出是一個list ,我們通過乘以( * )將list的相應元素Reduce為單個元素

GG1 <- function(x, y) Reduce(`*`, Map(dnorm, x = c(250, 265, 259),
                        mean = list(x), sd = list(y)))
identical(GG(24, 12), GG1(24, 12))
#[1] TRUE

identical(GG(32, 15), GG1(32, 15))
#[1] TRUE

根據OP的評論,

x <- seq(10,  40, length= 30)
y <- x
z <- outer(x, y, GG1)
persp(x, y, z , theta = 0, phi = 20, expand = 0.5, col = 'pink')

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM