Як обробляти в 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 введено примусово