<マイコード>のエラー:タイプ「クロージャー」のオブジェクトはサブセット化できません


110

ようやく、こすり落とすためのコードを作成することができました。正常に動作しているように見え、突然再度実行すると、次のエラーメッセージが表示されました。

Error in url[i] = paste("http://en.wikipedia.org/wiki/", gsub(" ", "_",  : 
  object of type 'closure' is not subsettable

コードで何も変更していないので、なぜかわかりません。

お知らせ下さい。

library(XML)
library(plyr)

names <- c("George Clooney", "Kevin Costner", "George Bush", "Amar Shanghavi")

for(i in 1:length(names)) {
    url[i] = paste('http://en.wikipedia.org/wiki/', gsub(" ","_", names[i]) , sep="")

    # some parsing code
}

3
また、私の場合のように、誤って!の[]代わりに入力した場合にも発生します()
Ehsan88 2016年

回答:


118

一般に、このエラーメッセージは、関数でインデックスを使用しようとしたことを意味します。たとえば、このエラーメッセージを再現できます。

mean[1]
## Error in mean[1] : object of type 'closure' is not subsettable
mean[[1]]
## Error in mean[[1]] : object of type 'closure' is not subsettable
mean$a
## Error in mean$a : object of type 'closure' is not subsettable

エラーメッセージで言及されているクロージャは、(大まかに)関数と、関数が呼び出されたときに変数を格納する環境です。


この特定のケースでは、ジョシュアが述べたように、あなたは url、変数として関数ています。という名前の変数を定義するとurl、エラーはなくなります。

通常、ベースR関数の後に変数に名前を付けることは避けてください。(呼び出し変数dataは、このエラーの一般的な原因です。)


演算子またはキーワードをサブセット化しようとすると、いくつかの関連エラーがあります。

`+`[1]
## Error in `+`[1] : object of type 'builtin' is not subsettable
`if`[1]
## Error in `if`[1] : object of type 'special' is not subsettable

でこの問題が発生しているshiny場合、最も可能性の高い原因は、reactive括弧を使用して関数として呼び出さずに式を操作。

library(shiny)
reactive_df <- reactive({
    data.frame(col1 = c(1,2,3),
               col2 = c(4,5,6))
})

データフレームであるかのように、リアクティブな式を光沢のある状態で操作することがよくありますが、実際には関数ですデータフレーム(または他のオブジェクト)を返すです。

isolate({
    print(reactive_df())
    print(reactive_df()$col1)
})
  col1 col2
1    1    4
2    2    5
3    3    6
[1] 1 2 3

しかし、括弧なしでサブセット化しようとすると、実際には関数にインデックスを付けようとしているため、エラーが発生します。

isolate(
    reactive_df$col1
)
Error in reactive_df$col1 : object of type 'closure' is not subsettable

35

ベクトルurlをサブセット化する前に、ベクトルを定義しません。 urlも基本パッケージの関数なので、url[i]その関数をサブセット化しようとしています...これは意味がありません。

おそらくurl前のRセッションで定義したが、そのコードをスクリプトにコピーするのを忘れていました。


1

この同様のエラーの場合 警告:$のエラー:タイプ「クロージャー」のオブジェクトはサブセット化できません[スタックトレースがありません]

::を使用して対応するパッケージ名を追加するだけです。例:

タグの代わりに(....)

shiny :: tags(....)と書く


0

この問題は、イベントの反応内のui要素を削除しようとしていた:

myReactives <- eventReactive(input$execute, {
    ... # Some other long running function here
    removeUI(selector = "#placeholder2")
})

このエラーが発生しましたが、removeUI要素行ではなく、なんらかの理由で次のオブザーバーにありました。removeUIメソッドをeventReactiveから取り出して別の場所に配置すると、このエラーが解消されました。


-5

あなたがするつもりだったと思う url[i] <- paste(...

の代わりにurl[i] = paste(...。その場合はに置き換え=てください<-

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.