簡體   English   中英

為什么 plot(Vectorize(function)) 有效,而 curve(Vectorize(function)) 無效?

[英]Why does plot(Vectorize(function)) work but curve(Vectorize(function)) does not?

為什么plot(Vectorize(f))工作,其中f是 function,但curve(Vectorize(f))不工作? 這種不一致讓我有點困擾。 這是一個完整的可重現示例:

set.seed(123)
N <- 9
X <- rnorm(N)
a <- 0.2
b <- 0.8
sigma <- 0.7
eps <- rnorm(N, 0, sigma)
Y <- a + b * X + eps


cor_p_value <- function(new_Y1)
{
Y[1] <- new_Y1
cor.test(X,Y)$p.value
}

lm_F_p_value <- function(new_Y1)
{
Y[1] <- new_Y1
anova(lm(Y ~ X))$Pr[1]
}

plot(Vectorize(cor_p_value), xlim = c(-50,50), lwd = 3)
curve(Vectorize(lm_F_p_value), col = "red", lwd = 3, lty = 2, add = TRUE)
# Error in curve(Vectorize(lm_F_p_value), col = "red", lwd = 3, lty = 2,  : 
# 'expr' must be a function, or a call or an expression containing 'x'

所以對於curve ,我必須做這個煩人的解決方法:

cu <- Vectorize(lm_F_p_value)
curve(cu, col = "red", lwd = 3, lty = 2, add = TRUE)

但為什么? Vectorize返回相同的 function, plot接受它, curve沒有。 所有這些功能都來自基本的內置 R 包,所以我希望它們能夠配合並保持一致。 應該是bug吧?

根據?curve

expr - function 的名稱,或者寫為x 的 function的調用或表達式,其計算結果為與 x 長度相同的 object。

curve(Vectorize(lm_F_p_value)(x), col = "red", lwd = 3, lty = 2, 
       add = TRUE, ylab = "y")

-輸出

在此處輸入圖像描述

暫無
暫無

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

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