R- အမျိုးအစား "ပိတ်ခြင်း" ၏ အရာဝတ္တုကို မည်သို့ကိုင်တွယ်ရမည်ကို အတိအကျ မသတ်မှတ်နိုင်ပါ။
R တွင် သင်ကြုံတွေ့ရသော အမှားတစ်ခုမှာ-
object of type 'closure' is not subsettable
လုပ်ဆောင်ချက်တစ်ခုကို ခွဲသတ်မှတ်ရန် သင်ကြိုးစားသောအခါတွင် ဤအမှားဖြစ်ပေါ်ပါသည်။
R တွင် စာရင်းခွဲများ၊ vectors၊ matrices နှင့် data frames များကို ခွဲထားနိုင်သော်လည်း function တစ်ခုတွင် အမျိုးအစားခွဲ၍မရသော “ close” ပါရှိပါသည်။
ဤအမှားအယွင်းကို ဖြေရှင်းနည်းကို ဤသင်ခန်းစာတွင် အတိအကျ ရှင်းပြထားသည်။
အမှားကို ဘယ်လိုပြန်ထုတ်မလဲ။
Vector တစ်ခုစီ၏တန်ဖိုးတစ်ခုစီကိုယူ၍ 5 ဖြင့်မြှောက်သော R တွင်အောက်ပါ function ကိုဖန်တီးသည်ဆိုပါစို့။
#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
မူရင်း vector ၏ တန်ဖိုးတစ်ခုစီကို 5 ဖြင့် မြှောက်ထားကြောင်း သတိပြုပါ။
ယခုကျွန်ုပ်တို့သည် function ကိုခွဲရန်ကြိုးစားသည်ဆိုပါစို့။
#attempt to get first element of function
cool_function[1]
Error in cool_function[1]: object of type 'closure' is not subsettable
R တွင် “ ပိတ်ခြင်း” အမျိုးအစားကို အမျိုးအစားခွဲရန် မဖြစ်နိုင်သောကြောင့် ကျွန်ုပ်တို့သည် အမှားအယွင်းတစ်ခု ရရှိခဲ့ပါသည်။
လုပ်ဆောင်ချက်သည် ‘ပိတ်ခြင်း’ အမျိုးအစား အမှန်ဖြစ်ကြောင်း စစ်ဆေးရန် အောက်ပါ syntax ကို အသုံးပြုနိုင်ပါသည်။
#print object type of function
typeof(cool_function)
[1] “closure”
“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
အမှားကို ဘယ်လိုဖြေရှင်းမလဲ။
ဤ error ကိုဖြေရှင်းရန်နည်းလမ်းမှာ function တစ်ခုအား အဓိပ္ပါယ်ဖွင့်ဆိုခြင်းကို ရှောင်ရှားရန်ဖြစ်သည်။
ဥပမာအားဖြင့်၊ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ယခင် cool_function ကို vector တစ်ခု၏ ပထမဒြပ်စင်တွင်သာ အသုံးပြုလိုပါက၊ အောက်ပါ syntax ကို အသုံးပြုနိုင်ပါသည်။
#apply function to just first element in vector
cool_function(data[1])
[1] 10
လုပ်ဆောင်ချက်အစား vector ကို ခွဲထားသောကြောင့် အမှားအယွင်းမရှိပေ။
သို့မဟုတ် ကျွန်ုပ်တို့သည် vector တစ်ခုလုံးတွင် 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 တွင် မှန်/မမှန် လိုအပ်သည့် တန်ဖိုး ပျောက်နေပုံကို ဘယ်လိုပြင်မလဲ။
ပြင်နည်း- Coercion မှ မိတ်ဆက်ထားသော NAs