2015-06-03 4 views
0

У меня есть 2 функции, определенные друг за другом. Когда я называю их блоком, выполняется 1-я функция (станет ясно, когда вы увидите ниже, и я понимаю, что происходит здесь и почему это происходит), а второй вызов функции игнорируется. Можно ли это исправить?вызов функции и выполнение в R

Извините, если это вопрос повторения. Кажется, не может найти решение для этого.

mini_val<-function() 
{ 
    m <- readline("Minimum: ") 
    if(!grepl("^[0-9]+$",m)) 
    { 
    return(mini_val()) 
    } 
    return(as.integer(m)) 
} 

mini<-mini_val() 

max_val<-function() 
{ 
    m <- readline("Maximum: ") 
    ifelse(!grepl("^[0-9]+$",m),return(max_val()),ifelse(m>=mini,as.integer(m),return(max_val()))) 
    return(as.integer(m)) 
} 

maxi<-max_val() 

когда я запускаю весь блок, то происходит следующее:

mini<-mini_val() 
Minimum number of segments (between 3 and 20) or Hit ESC to exit: 
Minimum number of segments (between 3 and 20) or Hit ESC to exit: max_val<-function() 
Minimum number of segments (between 3 and 20) or Hit ESC to exit: { 
Minimum number of segments (between 3 and 20) or Hit ESC to exit:  m <- readline("Maximum number of segments (between 3 and 20) or Hit ESC to exit: ") 
Minimum number of segments (between 3 and 20) or Hit ESC to exit:  ifelse(!grepl("^[0-9]+$",m),return(max_val()),ifelse(m>=mini,as.integer(m),return(max_val()))) 
Minimum number of segments (between 3 and 20) or Hit ESC to exit:  return(as.integer(m)) 
Minimum number of segments (between 3 and 20) or Hit ESC to exit: } 
Minimum number of segments (between 3 and 20) or Hit ESC to exit: 
Minimum number of segments (between 3 and 20) or Hit ESC to exit: maxi<-max_val() 
Minimum number of segments (between 3 and 20) or Hit ESC to exit: 1 
> 

Любая идея, как я могу обойти эту проблему?

Спасибо !, LR.

+0

Это будет зависеть от того, что язык это написано в –

+0

Пожалуйста, добавьте тег языка. –

ответ

0

Вторая функция игнорируется, потому что ваша программа все еще принимает вход readline("Minimum: ") из командной строки. Сначала вам нужно дать ему числовой ответ, чтобы продолжить работу с кодом.

Например, вы можете просто добавить строку с ничего, кроме 4 после mini_val() линии, и он будет работать при запуске их в блоке:

... 
} 

mini<-mini_val() 
4 

max_val<-function() 
{ 
... 

Хотя это не будет очень полезно, так как это то же самое, что работает mini <- 4.

Для получения требуемого поведения вам необходимо запустить его в .R-файле с source("yourfile.R"), а не в командной строке. (Предположительно, вы либо скопировали его в R, либо выполнили его в RStudio, выбрав все, либо аналогичную процедуру для запуска по очереди). Когда вы источник из файла, вы получите желаемое поведение:.

> source("yourfile.R") 
Minimum: 2 
Maximum: 3 
+0

Правильно, Дэвид. Но это часть более крупного кода, в котором происходят другие вещи. Эти разделы позволяют пользователю вводить выбранное минимальное и максимальное значение. Поэтому ваше решение точно не решает мою проблему. Вызов только тогда, когда я хочу ввести, также не устраняет проблему. Функции будут называться один за другим * немедленно *. –

+0

@LavanyaRamanan См. Мое редактирование; чтобы получить это поведение, вам нужно будет исправить его из файла, а не запускать его в блоке. –

+0

Спасибо тонну. Это сработало и решает мою проблему. Мне все еще интересно, если это можно устранить во время работы в командной строке (R или RStudio). –