2017-06-15 34 views
-3

寫一個函數required.replicates需要兩個參數,deltasigma並且具有兩個可選參數,z.alpha = 1.959964z.beta=0.8416212 .WRITE此功能與3個元素返回一個列表。第一個元素將是一個包含用於計算r.exactr.integer的四個參數的列表。你可以選擇你自己的名字,但這個元素應該可以通過result[[1]]之類的東西訪問 - 請參閱單元測試。其他兩個元素的值分別爲r.exactr.integer,對應於小數點和次最大整數值。 sigma = c(4,8)delta = c(5,10)。收件中的R的碼,使用公式需要複製

我的代碼:

z.alpha = 1.959964 
z.beta = 0.8416212 
sigma=c(4,8) 
delta=c(5,10) 

required.replicates <- function(z.alpha =1.959964,z.beta =0.8416212, sigma, 
delta) 
{ 

result <- list(z.alpha, z.beta, sigma, delta) 
print(r.exact<-(2*(z.alpha+z.beta)^2*(sigma)^2/(delta)^2)) 
print(r.integer<- ceiling(r.exact)) 
return(x <-list(result, r.exact,r.integer)) 

}

單元測試給測試

if(length(find("required.replicates"))>0) { 
    print(total.points <- total.points + 2) 
    r.4.5.result <- required.replicates(delta=5,sigma=4) 
    r.4.5.pars <- r.4.5.result[[1]] 
    if(length(r.4.5.pars)==4) { 
    print(total.points <- total.points + 2) 
    if(r.4.5.pars$delta==5) { 
    print(total.points <- total.points + 1) 
    } else { 
    print("Not returning delta parameter") 
     } 
    if(r.4.5.pars$z.alpha==1.959964) { 
    print(total.points <- total.points + 1) 
    } else { 
    print("Not returning z.alpha parameter") 
    } 
    } else { 
    print("Not returning all parameters") 
     } 
     if(r.4.5.result$r.integer==11) { 
    print(total.points <- total.points + 2) 
    } else { 
    print("Incorrect reps for sigma=4 and delta=5") 
     } 
    } else { 
    print("required.replicates not defined") 
    } 

它給我的錯誤:錯誤如果(r.4.5.pars $三角洲== 5){:參數長度爲零

請幫忙!在此先感謝

+0

嘗試命名您的'結果'列表的元素,以確保測試代碼可以找到我猜的參數? – Marius

+0

我已經通過命名列表(結果)解決了該錯誤,但現在我有新的錯誤錯誤在if(r.4.5.result $ r.integer == 11){:參數的長度爲零新代碼required.replicates <函數(z.alpha = 1.959964,z.beta = 0.8416212,西格瑪,三角洲) { F1 <-z.alpha F2 <-z.beta F3 <-sigma F4 <-delta list1的<-list( z.alpha = f1,z.beta = f2,sigma = f3,delta = f4) list1 result < - list1 print(r.exact < - (2 *(z.alpha +z.β)^ 2 * (r.integer < - ceiling(r.exact)) return(x <-list(result,r.exact,r.integer)) } – Jals

+0

我有兩個名單(結果和X),它解決了錯誤河謝謝 !! – Jals

回答

-1

我已經命名兩個列表(x和結果),並解決了它的問題。謝謝Marius

+0

這基本上是一個承認,你犯了一個錯字。這些並不是真正的好答案。我得到的錯誤是:「打印錯誤(total.points < - total.points + 2): object'total.points'not found」。請閱讀關於SO的高質量問題的基本信息。 –

+0

我沒有輸入錯字。我不知道我必須列出兩個列表,以便我的單元測試可以工作。我在R語言(第三週)方面很新,如果你覺得它的愚蠢問題,我很抱歉,但對我而言,這是一個學習的機會。 – Jals

+0

你沒有找到總積分,因爲我忘記了在我的代碼開始時總分數= 0。一世 – Jals