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

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다