[解決済み] 型 'closure' を型 'character' のベクトルに強制することはできません。
質問
shinyを使用してインタラクティブな散布図を作成しようとしています。虹彩のデータを使って、散布図 *petal vs sepalのxとyの次元をユーザーが選択し、選択された次元の単純な散布図を出力したいと思います。かなり簡単ですね。
まず、次元を表す文字列をggplotに渡すための関数を作る必要がありました。これを作って静的なデータでテストしてみました。うまくいった。
次に、花弁と萼の寸法(これらは私のX軸とY軸です)について、2つのドロップダウンとそれに続く2つの文字列(shinyを使用)を定義しました。
次に、shinyのreactive()関数を使って、switch文で2つの文字列変数を設定します。
コードは以下の通りです。
UI.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")
)
)
))
サーバー.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)})
})
エラーが出ます。
Error: cannot coerce type 'closure' to vector of type 'character'
私は自分のコードをデバッグするために、いくつかのステップを踏みました。まず、私のコードの最終行にハードコードされた寸法 (例えば "Petal.Length") を差し込みました output$myplot = renderPlot({myplotfunct( ...)
これは素晴らしい動作です。プロットは私が期待したとおりに描画されます。
次に、このplot関数に渡す文字列の値を追跡するためのデバッグ行を追加しました。ビンゴです。空っぽです。なぜ 空 ?? UI.rファイルから値を渡す必要があるように思われます。
解決方法は?
最後の2行のdatasetInput1、datasetInput2の呼び出しがエラーの原因です。
代わりに datasetInput1() と datasetInput2() を呼び出す必要があります。そうしないと、R はこの関数を char に変換しようとします。そうであるべきです。
#Debug print value of sting being passed
output$testvar = renderText(print(datasetInput1()))
# Plot
output$myplot = renderPlot({myplotfunct(iris, datasetInput1(), datasetInput2())})
は {{コード を使用すると、リアクティブ要素自体と対話するのではなく、リアクティブ要素の値を取得することができます。これはShinyのかなり基本的なコンセプトで、もしまだ馴染みがないのであれば、おそらく シャイニーチュートリアル
()をつけるだけで、以下のようにエラーが出なくなります。
関連
-
スクリプトとバッチ処理がひとつに
-
CE5.2版を使って、武術のベースサイトである第一レベルのメソッドを見つける(グラフィックチュートリアル)。
-
合理的オブジェクトスクリプトコマンド
-
linux シェル学習ノート 4日目
-
[解決済み】Jupyter Notebookが保存されない:postに'_xsrf'引数がない
-
[解決済み】アプリケーション起動メソッドで例外が発生 java.lang.reflect.InvocationTargetException
-
[解決済み】gitが「Pull is not possible because you have unmerged files」と言うのはなぜですか?
-
[解決済み】mysqli_fetch_array() は、パラメータ 1 が mysqli_result であることを期待し、boolean は【重複】で与えられました。
-
[解決済み】C#でクエスチョンマークを2つ並べるとどんな意味になるのか?
-
[解決済み】拡張メソッドは、一般的でない静的クラスで定義する必要がある
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
合理的オブジェクトスクリプトコマンド
-
[解決済み] file(file, "rt") のエラー : complete.cases プログラム内の無効な 'description' 引数
-
[解決済み】入力文字列のフォーマットが正しくない
-
[解決済み】 lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) でエラー : 'y' に NA/NaN/Inf, あらゆる方法を試したが解決しなかった。
-
[解決済み】変数が初期化されていないかもしれないエラー
-
[解決済み】dyld: ライブラリがロードされない ... 理由: 画像が見つからない
-
[解決済み】二重の空きや破損(fasttop)
-
[解決済み】C#コンパイラーエラー。"すべてのコードパスが値を返すわけではない"
-
[解決済み】ポインタと整数の比較を警告する
-
[解決済み】AdMobにアプリケーションを入れたら「ライブラリが見つからない」というエラーが出た