Як обробляти в r: об’єкт типу "closure" не піддається визначенню


Помилка, з якою ви можете зіткнутися в R:

 object of type 'closure' is not subsettable

Ця помилка виникає під час спроби підмножини функції.

У R можна створювати підмножини списків, векторів, матриць і кадрів даних, але функція має тип “закриття”, який не може бути підмножиною.

Цей посібник пояснює, як саме вирішити цю помилку.

Як відтворити помилку

Припустімо, ми створюємо таку функцію в R, яка приймає кожне значення вектора та множить його на 5:

 #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
Як виправити: NAs введено примусово

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *