web-dev-qa-db-ja.com

型 'closure'を型 'character'のベクトルに強制することはできません

Shinyを使用してインタラクティブな散布図を作成しようとしています。虹彩データを使用して、散布図のx次元とy次元を選択して(* petal vs sepal)、選択した次元の単純な散布図を出力するようにします。とても簡単です。

最初に、次元を表す文字列をggplotに渡すことができる関数を作成する必要がありました。これを行い、静的データでテストしました。正常に動作します。

次に、花びらとがく片の寸法(x軸とy軸)に2つのドロップダウンと2つの後続の文字列(光沢を使用)を定義します。

次に、switchステートメントを使用してshinyのreact()関数を使用して2つの文字列変数を設定します。

これは、物事がうまくいかないように見えます。

私が得るエラーは次のとおりです。エラー:タイプ 'closure'をタイプ 'character'のベクトルに強制できません

私は自分のコードをデバッグするためにいくつかのステップを踏みました。最初にハードコードされた寸法(例: "Petal.Length")をコード出力の最終行に接続しました$ myplot = renderPlot({myplotfunct(...

これはうまく機能します。プロットは予想どおりにレンダリングされます。

次に、このプロット関数を渡す文字列の値を追跡するデバッグ行を追加しました。ビンゴ。空っぽです。なぜempty?? UI.rファイルから値を渡す必要があるようです。

コードは次のとおりです。

どんな助けも大歓迎です。ありがとう!

I.R

library(shiny)

# Define UI for dataset viewer application
shinyUI(fluidPage(

# Application title
titlePanel("Shiny Text"),

# Sidebar with controls to select a dataset and specify the
# number of observations to view
sidebarLayout(
  sidebarPanel(
    selectInput("dataset1", "Choose a Sepal Measure:", 
              choices = c("Sepal Length", "Sepal Width")),

    selectInput("dataset2", "Choose a Petal Measure:", 
              choices = c("Petal Length", "Petal Width"))
 ),

 # Main Scatter Plot
 mainPanel(

   textOutput("testvar"),

   plotOutput("myplot")
   )
  )
))

Server.R

library(shiny)
library(datasets)

library(ggplot2)

#Define a function to plot passed string variables in ggplot

myplotfunct = function(df, x_string, y_string) {
  ggplot(df, aes_string(x = x_string, y = y_string)) + geom_point()
}

shinyServer(function(input, output) {

# Sepal Inputs
datasetInput1 <- reactive({
  switch(input$dataset1,
       "Sepal Length" = "Sepal.Length",
       "Sepal Width" = "Sepal.Width")
})

# Petal Inputs
datasetInput2 <- reactive({
  switch(input$dataset2,
       "Petal Length" = "Petal.Length",
       "Petal Width" = "Petal.Width")
})

#Debug print value of sting being passed
output$testvar = renderText(print(datasetInput1))

# Plot
output$myplot = renderPlot({myplotfunct(iris, datasetInput1, datasetInput2)})

})
12
Jeremy Pastore

最後の2行のdatasetInput1とdatasetInput2の呼び出しがエラーの理由です。

代わりに、datasetInput1()およびdatasetInput2()を呼び出す必要があります。そうでない場合、Rは関数をcharに変換しようとします。

()を追加するだけで、以下に示すようにエラーが消えます。

enter image description here

10
faidherbard