r - চর এবং চরিত্রের বস্তুর মধ্যে পার্থক্য




(2)

ভাষার সংজ্ঞা থেকে :

"চর": একটি 'স্কেলার' স্ট্রিং অবজেক্ট (কেবলমাত্র অভ্যন্তরীণ) ***
"অক্ষর": একটি ভেক্টর যা অক্ষরের মান ধারণ করে

ব্যবহারকারীরা সহজেই '***' দিয়ে চিহ্নিত ধরনের ধরণের অবজেক্টগুলিকে ধরে রাখতে পারবেন না।

y <- "My name is hasnain"
class(y)

ক্লাস ফাংশনগুলি বলে যে 'y' অক্ষর শ্রেণীর অন্তর্গত। আমি যা বুঝতে পেরেছি তা হল 'y' এমন একটি বস্তু যা চর ধরণের এবং এটি অক্ষর শ্রেণীর অন্তর্গত। চরিত্রের বস্তুটিও কি চরিত্র শ্রেণীর অন্তর্গত?


অভ্যন্তরীণ সি পাশের দুটি আর ধরণের char এবং character যথাক্রমে CHARSXP এবং STRSXP সাথে CHARSXP । আর স্তরে, একজন সর্বদা character বিষয়গুলি নিয়ে কাজ করে; একটি একক স্ট্রিং, যেমন:

y <- "My name is hasnain"

প্রকৃতপক্ষে দৈর্ঘ্যের একটি character অবজেক্ট ১. অভ্যন্তরীণভাবে, একটি character প্রতিটি উপাদান একটি char , তবে আর একটি character নিষ্কাশন, তৈরি এবং / বা ব্যবহারের সরাসরি উপায় (এএফএইকি) সরবরাহ করে না।

যদিও আপনি খাঁটি আর দিয়ে একটি char / CHARSXP অবজেক্ট তৈরি করতে পারবেন না, mkChar ফাংশনটি ব্যবহার করে এটি আর / সি ইন্টারফেসের মাধ্যমে পাওয়া সোজা, যা একটি স্ট্যান্ডার্ড সি স্ট্রিং নেয় এবং এটিকে CHARSXP পরিণত করে। উদাহরণস্বরূপ, কেউ একটি char.c ফাইল তৈরি করতে পারে:

#include <stdio.h>
#include <stdlib.h>
#include <R.h>
#include <Rinternals.h>
SEXP returnCHAR() {
   SEXP ret = PROTECT(mkChar("Hello World!"));
   UNPROTECT(1);
   return ret;
}

R CMD SHLIB char.c মাধ্যমে R CMD SHLIB char.c সংকলনের পরে আর পাশ থেকে:

dyn.load("char.so")  #linux dll; extension varies across platforms
x<-.Call("returnCHAR")
x
# <CHARSXP: "Hello World!">
typeof(x)
#[1] "char"
length(x)
#[1] 12

typeof এবং length পাশাপাশি আমি অন্য অনেকগুলি আর ফাংশন পাইনি যা char অবজেক্টগুলিতে কাজ করে। এমনকি as.character কাজ করে না! আমি কোনও স্ট্যান্ডার্ড character ভেক্টর থেকে একটি char বের করতে পারি না, বা বিদ্যমান character ভেক্টরটিতে এই char sertোকাতে পারি না (অ্যাসাইনমেন্টটি কাজ করে না)।

c ফাংশন একটি list coerces যদি কোনও বস্তুটি char :

c(1,"a",x)
#[[1]]
#[1] 1
#
#[[2]]
#[1] "a"
#
#[[3]]
#<CHARSXP: "Hello World!">

আমরা অভ্যন্তরীণ .Internal(inspect()) ব্যবহার করতে পারি (সতর্কতা: inspect একটি অভ্যন্তরীণ, উন্মুক্ত ফাংশন নয় এবং এটি ভবিষ্যতে প্রকাশে পরিবর্তিত হতে পারে it এটির উপর নির্ভর করবেন না) কোনও বস্তুর অভ্যন্তরীণ কাঠামোর ঝলক পেতে । আমি যতদূর জানি, char / CHARXSP অবজেক্টগুলি মেমরি বাঁচাতে স্ট্রিং ভেক্টরগুলির মধ্যে ভাগ করা হয়। এই ক্ষেত্রে:

let<-letters[1:2]
.Internal(inspect(let))
#@1aff2a8 16 STRSXP g0c2 [NAM(1)] (len=2, tl=0)
#  @1368c60 09 CHARSXP g0c1 [MARK,gp=0x61] [ASCII] [cached] "a"
#  @16dc7c0 09 CHARSXP g0c1 [MARK,gp=0x60] [ASCII] [cached] "b"
mya<-"a"
.Internal(inspect(mya))
#@3068710 16 STRSXP g0c1 [NAM(3)] (len=1, tl=0)
#  @1368c60 09 CHARSXP g0c1 [MARK,gp=0x61] [ASCII] [cached] "a"

উপরের আউটপুট থেকে, আমরা দুটি জিনিস নোট করব:

  • STRSXP অবজেক্টস STRSXP অবজেক্টের ভেক্টর, যেমনটি আমরা উল্লেখ করেছি;
  • স্ট্রিংগুলি একটি "গ্লোবাল পুলে" সংরক্ষণ করা হয়: দুটি ভিন্ন বস্তুতে স্বতন্ত্রভাবে তৈরি হওয়া সত্ত্বেও "a" স্ট্রিং একই ঠিকানায় সংরক্ষণ করা হয়।

নিকোলার উত্তর অনুসারে

অভ্যন্তরীণ সি পাশের দুটি আর ধরণের চর এবং অক্ষর যথাক্রমে CHARSXP এবং STSXP এর সাথে মিল রয়েছে। আর স্তরে, একজন সর্বদা চরিত্রগত বিষয়গুলি নিয়ে কাজ করে; একটি একক স্ট্রিং, যেমন:

y <- "My name is hasnain"

আর-তে, পাঠ্যের একটি অংশটি অক্ষরের ক্রম (বর্ণ, সংখ্যা এবং চিহ্ন) হিসাবে উপস্থাপিত হয়। অক্ষরের ক্রম সংরক্ষণের জন্য ডেটা টাইপ আর সরবরাহ করে তা হ'ল চরিত্র। সাধারণত, আর এর মধ্যে অক্ষরের স্ট্রিং ধারণ করে এমন একটি বস্তুর মোড হ'ল "চরিত্র"।

আর অক্ষরে স্ট্রিংয়ের মানগুলি উপস্থাপন করতে একটি অক্ষর অবজেক্ট ব্যবহার করা হয় We

> x = as.character(3.14) 
> x              # print the character string 
[1] "3.14" 
> class(x)       # print the class name of x 
[1] "character"

চরিত্র / স্ট্রিং - ভেক্টরের প্রতিটি উপাদান হ'ল এক বা একাধিক অক্ষরের একটি স্ট্রিং। অক্ষর ভেক্টরগুলিতে অন্তর্নির্মিত হ'ল অক্ষর এবং লেটারগুলি যা 26 টি লোয়ার (এবং উপরের) কেস চিঠিগুলি সম্মানজনকভাবে সরবরাহ করে।

> y = c("a", "bc", "def")
> length(y)
[1] 3
> nchar(y)
[1] 1 2 3
> y == "a"
[1] TRUE FALSE FALSE
> y == "b"
[1] FALSE FALSE FALSE

এটি এত সহজ যে হ্যাঁ আপনি ঠিক বুঝতে পেরেছেন যে y টাইপ চর বিজ্ঞাপনটির একটি চরিত্র / স্ট্রিং ক্লাসের অন্তর্গত তবে যদি এবং কেবল যদি 'ক' এখানে স্ট্রিং / চরিত্র গঠনের অক্ষরের ক্রম হয়




r  

r