R中的函数调用和执行
function call and execution in R
我先后定义了 2 个函数。当我将它们作为一个块调用时,第一个函数被执行(当你看到下面并且我明白这里发生了什么以及为什么会发生时会变得清楚)并且第二个函数调用被忽略。这可以修复吗?
如果这是一个重复的问题,我们深表歉意。似乎找不到解决方案。
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。
第二个函数被忽略,因为您的程序仍在接收来自命令行的 readline("Minimum: ")
输入。您需要先给它一个数字响应才能继续您的代码。
例如,您可以在 mini_val()
行之后只添加一行 4
,当您 运行 它们在一个块中时它会起作用:
...
}
mini<-mini_val()
4
max_val<-function()
{
...
尽管这不是很有用,因为它与 运行ning mini <- 4
.
相同
要产生您想要的行为,您需要 运行 在带有 source("yourfile.R")
的 .R 文件中,而不是在命令行中。 (大概您是将其复制粘贴到 R 中,或者通过全选 运行 在 RStudio 中对其进行 运行 处理,或者使用类似的程序逐行 运行 对其进行处理)。当您从文件中获取它时,您会得到所需的行为:
> source("yourfile.R")
Minimum: 2
Maximum: 3
我先后定义了 2 个函数。当我将它们作为一个块调用时,第一个函数被执行(当你看到下面并且我明白这里发生了什么以及为什么会发生时会变得清楚)并且第二个函数调用被忽略。这可以修复吗?
如果这是一个重复的问题,我们深表歉意。似乎找不到解决方案。
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。
第二个函数被忽略,因为您的程序仍在接收来自命令行的 readline("Minimum: ")
输入。您需要先给它一个数字响应才能继续您的代码。
例如,您可以在 mini_val()
行之后只添加一行 4
,当您 运行 它们在一个块中时它会起作用:
...
}
mini<-mini_val()
4
max_val<-function()
{
...
尽管这不是很有用,因为它与 运行ning mini <- 4
.
要产生您想要的行为,您需要 运行 在带有 source("yourfile.R")
的 .R 文件中,而不是在命令行中。 (大概您是将其复制粘贴到 R 中,或者通过全选 运行 在 RStudio 中对其进行 运行 处理,或者使用类似的程序逐行 运行 对其进行处理)。当您从文件中获取它时,您会得到所需的行为:
> source("yourfile.R")
Minimum: 2
Maximum: 3