2011-04-02 91 views
0

我編寫了一個函數,它帶有2個參數,但用特定值調用該函數會引發一條錯誤消息。這裏是我的代碼:R中函數自變量的問題

dynamicwilcox <- function(column, datacol) {  
    t = read.table("all.txt") 
    #print(column) 
    if(column=="Ph") { 
     uniphy=unique(c(t$Phylum)) 
     print(uniphy) 
    }    

    if(column=="Cl") { 
     uniclass = unique(c(t$Class)) 
     print(uniclass) 
    } 
} 

調用函數dynamicwilcox("Ph","A")給我一個錯誤。爲什麼?

+0

什麼是錯誤信息? – lecodesportif 2011-04-02 09:55:56

+0

@lecodesportif:「dynamicwilcox」(「Ph」 中的意外符號,但是當我嘗試像這樣運行它時:dynamicwilcox(Ph,A)它不會給我錯誤,但腳本不會打印任何內容 – weblover 2011-04-02 10:15:13

+0

@lecodesportif: thnx爲你的幫助,我發現了這個問題,我錯過了「在函數內部,但我試圖添加一個可以從鍵盤讀取的變量,並讓該函數基於它工作,但它不工作,你能幫助我?? – weblover 2011-04-02 10:47:34

回答

1

奇怪的事情肯定會發生 - 是所有的錯誤信息?

如果我把你的代碼回到基本知識,並註釋掉所有我不能跑,因爲我沒有你的數據文件中的東西,下面的功能而不會出現錯誤:

dynamicwilcox <- function(column,datacol) { 
    ##dat <- read.table("all.txt") ## probably not good to call something t 
    if(column=="Ph") { 
     ##uniphy=unique(c(t$Phylum)) 
     ##print(uniphy) 
     writeLines("column was 'Ph'") 
    } 
    if(column=="Cl") { 
     ##uniclass = unique(c(t$Class)) 
     ##print(uniclass) 
     writeLines("column was 'Cl'") 
    } 
} 

R> dynamicwilcox("Ph", "A") 
column was 'Ph' 

也許你可以從上面的代碼開始,看看它是否適合你,如果它確實的話,建立它。

至於dynamicwilcox(Ph, A)正常工作,除非您已經在當前環境中定義了對象PhA,否則它將無法工作。它不會打印任何東西,因爲無論存儲什麼Ph不是等於"Ph""Cl"。如果你運行這兩行,你會得到什麼?:

R> Ph 
R> A 

希望這可以解釋爲什麼這種調用函數的方式失敗。

更新:至於改變功能使用readline()所以它接受用戶輸入,這裏是一個版本:

dynamicwilcox <- function() { 
    ANSWER <- readline("What column do you want to work on? ") 
    if(ANSWER=="Ph") { 
     writeLines("column was 'Ph'") 
    } else if(ANSWER=="Cl") { 
     writeLines("column was 'Cl'") 
    } else { 
     writeLines(paste("Sorry, we don't know what to do with column", ANSWER)) 
    } 
    ANSWER ## return something 
} 

這是在使用中:

R> dynamicwilcox() 
What column do you want to work on? Ph 
column was 'Ph' 
[1] "Ph" 
R> dynamicwilcox() 
What column do you want to work on? Cl 
column was 'Cl' 
[1] "Cl" 
R> dynamicwilcox() 
What column do you want to work on? FooBar 
Sorry, we don't know what to do with column FooBar 
[1] "FooBar" 

但不要讀?readline,因爲它在你可以學習的一個例子中有類似的東西。

+0

@Gavin Simpson:thnx爲你的幫助,但我發現了錯誤,我是missng一個「,這工作:dynamicwilcox(」Ph「,」A「),但現在我試圖從鍵盤讀取,並且根據我讀的內容執行腳本,我爲此詢問了一個新問題,並且您幫助了我:)但我沒有找到完整的解決方案,因爲掃描在我的情況下不起作用 – weblover 2011-04-02 10:56:21

+0

@abd我已更新以顯示如何使用'readline()',我剛剛在你之前的問答中留下了關於從鍵盤讀取的另一個評論。 – 2011-04-02 11:05:42

+0

@Gavin Simpson:你好,我確實嘗試過,但沒有奏效,腳本並沒有等待我輸入這個詞,它只是繼續: ,我在Windows上運行腳本,結果出現在DOS.is這是錯誤? – weblover 2011-04-02 11:07:31