簡體   English   中英

如何從 R 中的函數輸出創建繪圖

[英]How to create a plot from the output of a function in R

我有一個函數可以計算基因 (x) 中表達水平向量的對數似然; 例如 -0.465、0.111、-0.437。 計算的西格瑪值為 0.4717,a = 0.8861。

    loglike <- function(x,theta,sigma,a) {
      sum(log(theta/(2*a)*(x<a)*(x>-a) + (1- 
      theta)*dnorm(x,mean=0.0,sd=sigma)))
    }

我想將 theta 的可能值向量輸入到函數中,並用每個 theta 值繪制函數的結果。 所以我想到了一個 for 循環來旋轉函數中 theta 的所有值,以從 loglike 函數的輸出創建一個值列表。 然后根據對數結果創建一個 theta 圖。

   theta <- seq(0,1,0.01)  

   result_ <- c()
   for (i in 1:length(theta)) {
      result <- loglike(x,i,sigma,a)
      result_[i] <- result[i]
   }

但這只是給了我警告信息:

   Warning messages:
   1: In log(theta/(2 * a) * (x < a) * (x > -a) + (1 - theta) * 
   dnorm(x,  :
     NaNs produced

我知道該函數有效,因為當我一次使用一個函數時,它會返回值,例如

    loglike(x,0,sigma,a)
    > -333.454234

我對 R 作為一種語言不是很有信心,所以非常感謝任何幫助。

感謝您添加 x、a 和 sigma 的值:這些使我能夠找到您的錯誤。

在這個循環中:

  for (i in 1:length(theta)) {
      result <- loglike(x,i,sigma,a)
      result_[i] <- result[i]
   }

您將i作為 theta 的值輸入到 loglike 函數中。 請記住, i是從 1 到 101 的循環的索引號,但是您需要循環每個循環的 theta 值,因此它應該是theta[i]

此外,因為您的loglike函數只返回一個數字,所以您將一個數字存儲到result ,然后嘗試將result[i]存儲到result_[i] 當循環超過 i = 1 時,您正在嘗試移動一個不存在的數字。

這是一個完整的工作示例:

loglike <- function(x, theta, sigma, a)
{
  sum(log((theta / (2*a)) * (x < a) * (x > -a) +
          (1 - theta) * dnorm(x, mean = 0.0, sd = sigma)))
}

x       <-  0.111
sigma   <-  0.4717
a       <-  0.8861
theta   <- seq(0, 1, 0.01)
result  <- numeric()

for (i in 1:length(theta)) result[i] <- loglike(x, theta[i], sigma, a)

暫無
暫無

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

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