it-swarm.dev

<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
}
101
user1496289

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

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
104
Richie Cotton

하위 집합을 시도하기 전에 url 벡터를 정의하지 마십시오. url은 기본 패키지의 함수이기도하므로 url[i]는 해당 함수의 하위 집합을 시도하고 있습니다 ... 어떤 의미가 없습니다.

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

33
Joshua Ulrich

이 문제는 이벤트 내부의 UI 요소를 제거하려고 시도하고있었습니다.

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

이 오류가 발생했는데 removeUI 요소 행렬이 아니라 다음에 몇 가지 이유로 옵저버에있었습니다. removeUI 메소드를 eventReactive 밖으로 가져와 다른 곳에 배치하면이 오류가 제거됩니다.

0
TheMooCows237