我用Shiny编写了一个代码,但现在我遇到了一件事,我只想问。
在代码中,您将看到在“服务器”端,我想从等式绘制一个平面。但我得到了这个: http://www.onlinemathe.de/forum/Ebenen-Gleichung-durch-2-Winkel
它用德语,但最后你会看到一个例子,它将我引向我的等式。
问题是它首先只是用3D而不是平面绘制一个点!
第二,有没有更好的方法告诉R它应该逐行使用data.frame
中的数据?
我想在MATLAB中就像:
data[i,1] and data[i,2]
i+1
以下是代码,请尽可能帮助我!
install.packages("shiny")
install.packages("rgl")
install.packages("plotrix")
library(shiny)
library(rgl)
library(plotrix)
ui <- fluidPage(
headerPanel("Block Theory 0.1"),
sidebarPanel(
numericInput(inputId = "strike", label = "Strike:", value = "", width = "80%", min = 0, max = 360),
numericInput(inputId = "dip", label = "Dip:", value = "", width = "80%", min = 0, max = 90),
actionButton(inputId = "add", label = "Add a plane"),
actionButton(inputId = "plotbutton", label = "Update")
),
mainPanel(
rglwidgetOutput(outputId = "plot")
),
verbatimTextOutput(outputId = "log_planes")
)
server <- function(input, output) {
data_planes <- data.frame()
makeReactiveBinding("data_planes")
observe({
input$add
isolate({
data_planes <<- rbind(data_planes, data.frame(input$strike, input$dip))
data_planes <<- na.omit(data_planes)
})
})
output$plot <- renderRglwidget({
input$plotbutton
isolate({
if (i < nrow(data_planes)) {
phi <- 90 - data_planes[1,1]
deta <- data_planes[1,2]
a <- sin(phi)*cos(deta)
b <- sin(phi)*sin(deta)
c <- cos(phi)
planes3d(a,b,c,d = 0)
i <<- i + 1
}
rglwidget()
})
})
output$log_planes <- renderPrint({print(data_planes)})
}
shinyApp(ui = ui, server = server)