2013-11-25 52 views
2

我有這樣的示例代碼R返回到前一個點的功能,如果某些語句不滿足

sq <- function(){ 
    d <- readline("give number(0 to 10): ") 

    if (as.numeric(d) <= 5){ 
    dsquare <- as.numeric(d)^2 
    return(dsquare) 
    } else { 
    stop("OK") 
    } 

} 

我想要的,而不是停止的功能,要回點,用戶被提供d與readline()函數。有沒有辦法輕鬆做到這一點?

+0

嘗試'Recall'或者只是通過名稱再次調用函數? – Thomas

+0

我試圖找到一個召回()的例子。 Otherway,你的意思是在別的之後再次調用從d <-...到那裏if完成的代碼? – Tony

+0

對於小功能,召回可能沒問題。但是如果我不想從開始就開始這個功能呢?有沒有辦法Recall()的一部分功能?或者,也許我應該把我的功能打破得更小,並從我想重新開始的角度回想起來? – Tony

回答

2

呼應托馬斯的評論,或許你可以做這樣的事情:

sq<-function(){ 
    d<-readline("give number(0 to 5): ") 

    if (as.numeric(d)<=5){ 
    dsquare<-(as.numeric(d)^2) 
    return(dsquare) 
    } 
    else{ 
    Message <- paste("Input should be less than or equal to 5.", 
        "Please enter a new value (0 to 5)", sep = "\n") 
    message(Message, appendLF=TRUE) 
    sq() 
    } 
} 

這裏有幾個數字的試用:

sq() 
# give number(0 to 5): 1.5 
# [1] 2.25 
sq() 
# give number(0 to 5): 6 
# Input should be less than or equal to 5. 
# Please enter a new value (0 to 5) 
# give number(0 to 5): 7 
# Input should be less than or equal to 5. 
# Please enter a new value (0 to 5) 
# give number(0 to 5): 6 
# Input should be less than or equal to 5. 
# Please enter a new value (0 to 5) 
# give number(0 to 5): 2 
# # [1] 4 
+0

這是一個答案,但如果我想分開d()作爲一個獨立的函數,然後調用它在第一個sq()函數的一行,並且當我到達其他位置時,那麼d()函數會再次被調用,並從這一點開始? – Tony

+0

迭代似乎比遞歸更合適 – hadley

0

最後得到的答覆是由於你的答案也和這次真是萬分感謝。

首先我做一個函數調用d(),它是:

d<-function(){ 
    dd<-readline("give number(0 to 10): ") 

if (as.numeric(dd)<=5){ 
    dsquare<-(as.numeric(dd)^2) 
    return(dsquare) 
} else{ 
    d() 
} 

} 

然後我調用此函數的平方()函數,它是這樣的3行:

sq<-function(){ 
    d() 
} 
當然

我想要應用的腳本並不那麼簡單,但我會弄明白的! 一般來說,我明白你必須在許多小的函數中分開函數,並且在你想要的函數是你想要重新開始的地方時調用函數。

編輯:如果我想調用從d()到sq()的變量,我該怎麼做? 我試圖把返回(ds​​quare)放在sq()函數中,而不是d(),但是它給出了ERROR。

+0

'sq < - d'和你最後一個代碼塊的功能相同,但我真的沒有看到它的意義。 – Dason

+0

這是一個通用形式,而不是我想要應用這個問題的代碼。 – Tony

+0

有人可以回答我編輯的問題嗎? – Tony

相關問題