[r] <my code> 오류 : ‘closure’유형의 개체는 하위 집합이 아닙니다.

드디어 스크래핑 코드를 알아낼 수있었습니다 . 잘 작동하는 것 같았고 갑자기 다시 실행했을 때 다음과 같은 오류 메시지가 나타납니다.

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
}



답변

일반적으로이 오류 메시지는 함수에서 인덱싱을 사용하려했음을 의미합니다. 예를 들어이 오류 메시지를 재현 할 수 있습니다.

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

오류 메시지에 언급 된 클로저는 (느슨하게) 함수가 호출 될 때 변수를 저장하는 환경과 함수입니다.


이 특정 경우에 Joshua가 언급했듯이 url함수에 변수로 액세스하려고 합니다. 라는 변수를 정의 url하면 오류가 사라집니다.

연습 문제로, 일반적으로 base-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


답변

벡터 url를 서브 세트하기 전에 벡터를 정의하지 않습니다 . url또한 기본 패키지의 함수이므로 url[i]해당 함수의 하위 집합을 시도하고 있습니다.

아마도 url이전 R 세션에서 정의 했지만 해당 코드를 스크립트에 복사하는 것을 잊었습니다.


답변

이 유사한 오류의 경우
경고 : $ 오류 : ‘클로저’유형의 개체는 하위 집합이 아닙니다. [사용 가능한 스택 추적 없음]

::를 사용하여 해당 패키지 이름을 추가하십시오.

태그 (….) 대신

반짝이 쓰기 :: 태그 (….)


답변

이 문제는 이벤트 반응 내에서 ui 요소를 제거하려고했습니다.

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

이 오류가 발생했지만 removeUI 요소 줄이 아니라 어떤 이유로 다음 관찰자에있었습니다. eventReactive에서 removeUI 메서드를 가져 와서 다른 곳에 배치하면이 오류가 제거되었습니다.


답변

나는 당신이 할 의도가 있다고 생각합니다 url[i] <- paste(...

대신 url[i] = paste(.... 경우에 따라서 교체 =와 함께 <-.


답변