[解決済み] 型 'closure' を型 'character' のベクトルに強制することはできません。
質問
shinyを使用してインタラクティブな散布図を作成しようとしています。 虹彩のデータを使って、散布図 *petal vs sepalのxとyの次元をユーザーが選択し、選択した次元の単純な散布図を出力したいのですが、可能でしょうか? かなり簡単です。
まず、次元を表す文字列をggplotに渡すための関数を作る必要がありました。 私はこれを行い、静的なデータでテストしました。 うまくいった。
次に、花弁と萼の寸法(これらは私のX軸とY軸です)に対して、2つのドロップダウンとそれに続く2つの文字列(shinyを使用)を定義します。
次に、shinyのreactive()関数を使って、switch文を使って2つの文字列変数を設定しました。
ここがうまくいかないようです。
出るエラーは Error: cannot coerce type 'closure' to vector of type 'character'
私は、自分のコードをデバッグするために、いくつかのステップを踏みました。 まず、私のコードの最終行にハードコードされた寸法 (例えば "Petal.Length") を差し込みました output$myplot = renderPlot({myplotfunct( ...)
これは素晴らしい動作です。 プロットは私が期待したとおりに描画されます。
それから、この plot 関数に渡している文字列の値を追跡するためのデバッグ行を追加しました。 ビンゴです。 空っぽです。 なぜ 空 ?? UI.rファイルから値が渡される必要があるように思えます。
コードは以下の通りです。
何かお手伝いいただけると幸いです。 ありがとうございます。
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)})
})
解決方法は?
最後の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のかなり基本的なコンセプトで、もしまだ馴染みがないのであれば、おそらく
シャイニーチュートリアル
()を追加するだけで、以下のようにエラーが消えます。
関連
-
[解決済み】model.frame.defaultでのエラー:変数の長さが異なる
-
[解決済み】R - if文の引数の長さが0である。
-
[解決済み】LMEモデルのレベル0、ブロック1でのバックソルブにおける特異性
-
[解決済み】rbind エラー。"名前が以前の名前と一致しない"
-
[解決済み】bstTreeの予測値の混乱行列、エラー:'The data must contain some levels that overlap reference'.
-
[解決済み】「Error in stripchart.default(x1, ...) : invalid plotting method」エラーを回避する方法は?
-
[解決済み】Rでデータフレームのサブセットをプロットする方法は?
-
[解決済み】エラー - replacement has [x] rows, data has [y].
-
[解決済み】ggplot2でのプロット:「Error: カテゴリ軸のY軸に "Discrete value supplied to continuous scale "と表示される。
-
[解決済み】R4DSのエラー比較(1)は、アトミック型とリスト型でのみ可能です
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"置換する項目数が置換長の倍数でない "と表示されるのはなぜですか?
-
[解決済み】 'height' はベクトルか行列でなければならない barplot のエラー
-
[解決済み】Rで「パッケージ'FILE_PATH'のインストールで終了ステータスが0でなかった」。
-
[解決済み] テスト
-
[解決済み】lis[[i]]のエラー:1つ未満の要素を選択しようとした場合
-
[解決済み] テスト
-
[解決済み】 colMeans(x, na.rm = TRUE) のエラー : KNN分類では 'x' は数値でなければならない
-
[解決済み】「Error in stripchart.default(x1, ...) : invalid plotting method」エラーを回避する方法は?
-
[解決済み】 if/while (条件) {: TRUE/FALSEが必要な場所に値がない場合のエラー
-
[解決済み] [Solved] read.csv warning 'EOF within quoted string' prevents complete reading of file.