드디어 스크래핑 코드를 알아낼 수있었습니다 . 잘 작동하는 것 같았고 갑자기 다시 실행했을 때 다음과 같은 오류 메시지가 나타납니다.
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(...
. 경우에 따라서 교체 =
와 함께 <-
.