Проблема с аргументами функции в R - PullRequest
0 голосов
/ 02 апреля 2011

Я написал функцию, которая принимает 2 параметра, но вызов функции с конкретными значениями вызывает сообщение об ошибке.Вот мой код:

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") выдает ошибку.Почему?

1 Ответ

1 голос
/ 02 апреля 2011

Что-то странное, конечно, происходит - это все сообщение об ошибке?

Если я верну ваш код к основам и закомментирую все, что я не могу запустить, потому что у меня нет вашегоВ файле данных, следующая функция работает без ошибок:

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) работы, он не может работать, если вы уже не определили объекты Ph и A в текущей среде.Он ничего не печатает, потому что все, что хранится в 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 какв одном из примеров вы можете извлечь из него нечто подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...