일반적으로이 오류 메시지는 함수에서 인덱싱을 사용하려했음을 의미합니다. 예를 들어이 오류 메시지를 재현 할 수 있습니다.
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
[]
대신()
!