R 查找值';s在最小和最大范围表中的位置
我在R中有一个数据框,用于闪亮的应用程序。此数据框有一列表示最小值,一列表示最大值。然后它会得到返回结果的列。它看起来像这样: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
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
也不起作用。是否继续你有什么建议吗?