Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 查找值';s在最小和最大范围表中的位置_R_Shiny - Fatal编程技术网

R 查找值';s在最小和最大范围表中的位置

R 查找值';s在最小和最大范围表中的位置,r,shiny,R,Shiny,我在R中有一个数据框,用于闪亮的应用程序。此数据框有一列表示最小值,一列表示最大值。然后它会得到返回结果的列。它看起来像这样: Min Max Return ReturnifConditionTrue 71 80 40 30 81 90 45 35 91 100 50 40 df <- read.table(text="Min Max Return ReturnifConditionTrue 71

我在R中有一个数据框,用于闪亮的应用程序。此数据框有一列表示最小值,一列表示最大值。然后它会得到返回结果的列。它看起来像这样:

Min Max Return ReturnifConditionTrue
71    80      40         30
81    90      45         35
91    100    50         40
df <- read.table(text="Min Max Return ReturnifConditionTrue
71    80      40         30
81    90      45         35
91    100    50         40",header=T)

library(shiny)

ui <- shinyUI(
  fluidPage(
numericInput("number","Number: ",min=71,max=100,value=85,step=1),
selectInput("condition","Condition:", choices=c("TRUE","FALSE")),
textOutput("text")
)
)

server <- function(input, output, session) {

  my_result <- reactive({
     our_row <- which(input$number>=df$Min & input$number<=df$Max)
     if(input$condition=="TRUE")
     {
       return(df[our_row,"ReturnifConditionTrue"])
     }
     else
     {
       return(df[our_row,"Return"])
     }

  })

  output$text <- renderText({my_result() })

}

shinyApp(ui,server)
数字将通过用户输入接收。一旦给出一个数字,就必须找到它所属的范围。找到相应的范围后,必须从该范围所在的同一行返回另一列中的另一个金额。如果某个条件为true,则必须返回另一列的结果。例如,如果用户给出85作为一个值,但条件测试为false,则函数应返回45作为结果


我还没有找到解决办法。我在循环中使用了
if
之间的
和增量
,但这不起作用(测试条件,然后找到
between
函数返回true的位置,然后匹配列并返回值),我怀疑即使它起作用,由于此功能将集成到闪亮应用程序的服务器端,因此实现起来会很慢。是否有一种方法可以实现这一点,并且可能更有效?提前谢谢

您可以这样做:

Min Max Return ReturnifConditionTrue
71    80      40         30
81    90      45         35
91    100    50         40
df <- read.table(text="Min Max Return ReturnifConditionTrue
71    80      40         30
81    90      45         35
91    100    50         40",header=T)

library(shiny)

ui <- shinyUI(
  fluidPage(
numericInput("number","Number: ",min=71,max=100,value=85,step=1),
selectInput("condition","Condition:", choices=c("TRUE","FALSE")),
textOutput("text")
)
)

server <- function(input, output, session) {

  my_result <- reactive({
     our_row <- which(input$number>=df$Min & input$number<=df$Max)
     if(input$condition=="TRUE")
     {
       return(df[our_row,"ReturnifConditionTrue"])
     }
     else
     {
       return(df[our_row,"Return"])
     }

  })

  output$text <- renderText({my_result() })

}

shinyApp(ui,server)

df您要查找的是函数
which()
。它返回满足特定条件的位置。然后可以使用if语句选择要从中提取值的列

tb = data.frame(
  Min = c(71, 81, 91),
  Max = c(80, 90, 100),
  Return = c(40, 45, 50),
  ReturnifConditionTrue = c(30, 35, 40)
)

x = 75
condition = TRUE

pos = which(x >= tb$Min & x <= tb$Max)

if (condition) {
  val = tb$ReturnifConditionTrue[pos]
} else {
  val = tb$Return[pos]
}
tb=data.frame(
最小值=c(71,81,91),
最大值=c(80,90,100),
返回=c(40,45,50),
ReturnifConditionTrue=c(30,35,40)
)
x=75
条件=真

pos=哪个(x>=tb$Min&x感谢您的回答-它工作得很好。我正在尝试将
if
语句和
pos
计算放入命名函数中,以便我可以将它们移动到另一个R文件中,稍后调用它们。我不断收到涉及“闭包”到“字符”转换的错误。
as.function
也不起作用。是否继续你有什么建议吗?