2011-04-02 67 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