R'de nasıl ele alınır: "kapatma" türündeki nesne alt tanımlanamaz
R’de karşılaşabileceğiniz bir hata:
object of type 'closure' is not subsettable
Bu hata, bir işlevi alt kümelemeye çalıştığınızda ortaya çıkar.
R’de listeleri, vektörleri, matrisleri ve veri çerçevelerini alt kümelemek mümkündür, ancak bir fonksiyonun alt kümelenemeyen “kapama” türü vardır.
Bu eğitimde bu hatanın nasıl çözüleceği tam olarak açıklanmaktadır.
Hata nasıl yeniden oluşturulur?
R’de bir vektörün her değerini alan ve onu 5 ile çarpan aşağıdaki fonksiyonu oluşturduğumuzu varsayalım:
#define function
cool_function <- function (x) {
x <- x*5
return (x)
}
Bu fonksiyonu pratikte şu şekilde kullanabiliriz:
#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
Orijinal vektörün her değerinin 5 ile çarpıldığına dikkat edin.
Şimdi fonksiyonu alt kümelemeye çalıştığımızı varsayalım:
#attempt to get first element of function
cool_function[1]
Error in cool_function[1]: object of type 'closure' is not subsettable
R’de “kapama” tipindeki bir nesneyi alt kümelemek mümkün olmadığından bir hata alıyoruz.
İşlevin gerçekten ‘kapama’ türünde olup olmadığını kontrol etmek için aşağıdaki sözdizimini kullanabiliriz:
#print object type of function
typeof(cool_function)
[1] “closure”
“Kapatma” nesnelerine ilişkin daha fazla örnek
R’deki her fonksiyon “kapatma” tipindedir. Örneğin R tabanındaki herhangi bir fonksiyonu alt kümelemeye çalışırsak bu hatayı alırız:
#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
Hata nasıl çözülür?
Bu hatayı çözmenin yolu, bir fonksiyonun yetersiz tanımlanmasından kaçınmaktır.
Örneğin, önceki cool_function’ımızı bir vektörün yalnızca ilk öğesine uygulamak istiyorsak aşağıdaki sözdizimini kullanabiliriz:
#apply function to just first element in vector
cool_function(data[1])
[1] 10
Fonksiyon yerine vektörü alt kümeye aldığımız için hata almıyoruz.
Veya cool_function’ı vektörün tamamına uygulayabiliriz:
#apply function to every element in vector
cool_function(data)
[1] 10 15 15 20 25 25 30 45
Hiçbir şekilde fonksiyonu alt kümelemeye çalışmadığımız için hata almıyoruz.
Ek kaynaklar
Aşağıdaki eğitimlerde R’deki diğer yaygın hataların nasıl çözüleceği açıklanmaktadır:
“Koşulun uzunluğu > 1 ve yalnızca ilk öğe kullanılacak” sorununu düzeltme
R’de nasıl düzeltilir: dim(X) pozitif uzunluğa sahip olmalıdır
R’de nasıl düzeltilir: doğru/yanlışın gerekli olduğu yerde eksik değer
Nasıl Düzeltilir: Zorlamanın Getirdiği NA’lar