R에서 처리하는 방법: "클로저" 유형의 객체를 하위 정의할 수 없습니다.
R에서 발생할 수 있는 오류는 다음과 같습니다.
object of type 'closure' is not subsettable
이 오류는 함수의 부분집합을 시도할 때 발생합니다.
R에서는 목록, 벡터, 행렬 및 데이터 프레임을 부분 집합으로 묶는 것이 가능하지만 함수에는 부분 집합을 할 수 없는 “클로저” 유형이 있습니다.
이 튜토리얼에서는 이 오류를 해결하는 방법을 정확하게 설명합니다.
오류를 재현하는 방법
벡터의 각 값을 가져와서 5를 곱하는 다음 함수를 R에서 생성한다고 가정합니다.
#define function
cool_function <- function (x) {
x <- x*5
return (x)
}
실제로 이 기능을 사용하는 방법은 다음과 같습니다.
#define data
data <- c(2, 3, 3, 4, 5, 5, 6, 9)
#apply function to data
cool_function(data)
[1] 10 15 15 20 25 25 30 45
원본 벡터의 각 값에 5를 곱했습니다.
이제 함수의 부분집합을 시도한다고 가정해 보겠습니다.
#attempt to get first element of function
cool_function[1]
Error in cool_function[1]: object of type 'closure' is not subsettable
R에서는 “클로저” 유형의 객체를 부분집합할 수 없기 때문에 오류가 발생합니다.
다음 구문을 사용하여 함수가 실제로 ‘클로저’ 유형인지 확인할 수 있습니다.
#print object type of function
typeof(cool_function)
[1] “closure”
‘클로저’ 개체의 추가 예
R의 모든 함수는 “클로저” 유형입니다. 예를 들어, R 베이스의 함수를 부분집합하려고 하면 다음 오류가 발생합니다.
#attempt to subset mean function
mean[1]
Error in mean[1]: object of type 'closure' is not subsettable
#attempt to subset standard deviation function
sd[1]
Error in sd[1]: object of type 'closure' is not subsettable
#attempt to subset table function
tabld[1]
Error in table[1]: object of type 'closure' is not subsettable
오류를 해결하는 방법
이 오류를 해결하는 방법은 단순히 함수를 부족하게 정의하지 않는 것입니다.
예를 들어 이전의 Cool_function을 벡터의 첫 번째 요소에만 적용하려면 다음 구문을 사용할 수 있습니다.
#apply function to just first element in vector
cool_function(data[1])
[1] 10
함수 대신 벡터를 부분집합하기 때문에 오류가 발생하지 않습니다.
또는 전체 벡터에 Cool_function을 적용할 수도 있습니다.
#apply function to every element in vector
cool_function(data)
[1] 10 15 15 20 25 25 30 45
어떤 방식으로든 함수의 하위 집합을 시도하지 않았기 때문에 오류가 발생하지 않습니다.
추가 리소스
다음 튜토리얼에서는 R의 다른 일반적인 오류를 해결하는 방법을 설명합니다.
해결 방법: 조건의 길이가 1보다 크고 첫 번째 요소만 사용됩니다.
R에서 수정하는 방법: Dim(X)는 양수 길이를 가져야 합니다.
R에서 수정하는 방법: true/false가 필요한 누락된 값
해결 방법: 강제로 인해 발생하는 NA