Как обрабатывать в R: объект типа «закрытие» не является подмножеством


Одна ошибка, с которой вы можете столкнуться в 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
Как исправить: NA, введенные принуждением

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.