我是R的新手,我試圖編寫一個函數,要求它只在特定的時間間隔內選擇值,所以我決定去k =如果它位於[下,上],則爲1;如果位於其他位置(在函數的前面定義了下和上),則爲0;但是,當我嘗試爲該函數賦值時,它始終返回此R,編碼一個函數內的不連續/間隔函數
myfun(10,0.5,0.05)
#Error in k[i] <- function(p) ifelse(p >= lower & p <= upper, 1, 0) :
# incompatible types (from closure to double) in subassignment type fix
我真的不知道這是什麼意思,我試着找到答案,但大多數網頁只是說如何解決他們的特定問題,而不是說它實際上意味着什麼。也許我一直沒有找到足夠的努力,如果我沒有,我很抱歉,但任何幫助將不勝感激。這裏是f ULL功能,它是否會有所幫助:
myfun <- function(a, q, m) {
k <- rep(0,a+1)
bin.prob <- rep(0,a+1)
for (i in 1:(a+1)) {
x <- i-1
qhat <- x/a
z <- qnorm(1-m/2)
upper <- qhat+(z*sqrt(qhat*(1-qhat)*(a^-1)))
lower <- qhat-(z*sqrt(qhat*(1-qhat)*(a^-1)))
k[i] <- function(q) ifelse(q>=lower & q<=upper, 1, 0)
bin.prob[i] <- dbinom(x,a,q)
}
C <- sum(k*bin.prob)
return(C)
}
myfun(10,0.5,0.05)
#Error in k[i] <- function(q) ifelse(q >= lower & q <= upper, 1, 0) :
# incompatible types (from closure to double) in subassignment type fix
新的問題 嘿,我想何時調整試圖調整數據集時這個功能,即遇到了新的問題成爲一+4和X成爲X + 2
> myfun2 <- function(a,q,m) {
+ fn <- function(a) a+4
+ abar <- fn(a)
+ kadj <- rep(0,abar+1)
+ bin.prob.adj <- rep(0,abar+1)
+ for (j in 1:(abar+1)) {
+ x <- j-1
+ fx <- function(x) x+2
+ xbar <- fx(x)
+ qhatadj <- xbar/abar
+ z <- (1-(m/2))
+ upperadj <- qhatadj+(z*sqrt(qhatadj*(1-qhatadj)*(abar^-1)))
+ loweradj <- qhatadj-(z*sqrt(qhatadj*(1-qhatadj)*(abar^-1)))
+ kadj[j] <- q>=loweradj & q<=upperadj
+ bin.prob.adj[j] <- dbinom(xbar,abar,q)
+ }
+ D <- sum(kadj*bin.prob.adj)
+ return(D)
+ }
> myfun2(10,0.5,0.05)
[1] NA
Warning messages:
1: In sqrt(qhatadj * (1 - qhatadj) * (abar^-1)) : NaNs produced
2: In sqrt(qhatadj * (1 - qhatadj) * (abar^-1)) : NaNs produced
3: In sqrt(qhatadj * (1 - qhatadj) * (abar^-1)) : NaNs produced
4: In sqrt(qhatadj * (1 - qhatadj) * (abar^-1)) : NaNs produced
我一直在試圖尋找一個答案,爲什麼這有AR是否已經發現NaNs警告可能意味着存在負平方根?但我不明白爲什麼會出現這種情況。這可能是我的錯誤編碼,或者可能完全是別的(我是R的新手)。謝謝你的幫助。
:
由於R脅迫邏輯向量在必要數值向量,治療
TRUE
如1和FALSE
爲0,上述分配新建分配FY可以更簡潔地作爲表達:分配可以被替換不要像這樣分配'k [i] < - function(q).....',但像這樣'fun < - function(q).......'分開定義該函數。然後做'k [i] < - fun(q)'。你爲什麼使用'ifelse'? 'q'是一個矢量嗎?如果不是僅僅執行'q> = lower && q <='upper',否則將事情保持原樣。 – Bhas