English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
نوع البيانات هو نظام واسع يستخدم لتحديد أنواع مختلفة من المتغيرات أو الوظائف.
نوع المتغير يحدد المساحة التي تستخدمها المتغير، وكيف يتم تفسير نمط البتات المخزن.
أهم أنواع البيانات في لغة R هي ثلاثة أنواع:
رقمي
منطقي
نص
يوجد نوعان رئيسيان من القيم الرقمية:
نوع عام | 123 -0.125 |
---|---|
حساب علمي | 1.23e2 -1.25E-1 |
يُطلق على نوع البيانات المنطقي في العديد من اللغات البرمجية الأخرى اسم布尔ية (Boolean)، ويكون قيمته فقط TRUE و FALSE.
ملاحظة:يفرق لغة R بين الحروف الكبيرة والصغيرة، لا يمكن استخدام true أو True لتعويض TRUE.
أكثر أنواع البيانات وضوحًا هي النوع النصي. النص هو ما يظهر في العديد من اللغات الأخرى كـ String، والقيم الثابتة محاطة ببساط.
> 'w3codebox' == "w3codebox" [1] TRUE
تعريف المتغيرات في لغة R لا يشبه قواعد اللغة البرمجية القوية الأخرى، حيث لا تحتاج إلى تحديد اسم المتغير ونوع البيانات بشكل مسبق، بل كل مرة تستخدم فيها عمليات الربط في R، فإنك تقوم بتعريف متغير جديد:
a = 1 b <- TRUE b = "abc"
بالنظر إلى نوع الكائنات، يمكن تقسيمها إلى 6 أنواع (سيتم شرح هذه الأنواع لاحقًا):
المتجه (Vector) في مكتبات اللغات البرمجية المخصصة مثل Java وRust وC# غالبًا ما يتم تقديمها، لأن المتجهات هي أدوات لا غنى عنها في العمليات الرياضية - أكثر المتجهات شيوعًا هي المتجه ثنائي الأبعاد، والذي سيتم استخدامه بالضرورة في نظام الإحداثيات المثلثية.
من الناحية الهيكلية، المتجه يمكن أن يُرى كجدول خطي، يمكن أن يُرى أيضًا كنموذج.
في لغة R، يمكن أن تكون المتجهات نوعًا من البيانات مما يجعل عمليات المتجهات أسهل:
> a = c(3, 4) > b = c(5, 0) > a + b [1] 8 4 >
c() هي وظيفة لإنشاء المتجهات.
هنا يتم إضافة اثنين من المتجهات ثنائية الأبعاد للحصول على متجه ثنائي الأبعاد جديد (8, 4). إذا قمت بعمل عملية على متجه ثنائي الأبعاد ومتجه ثلاثي الأبعاد، فقد يفقد المعنى الرياضي، حتى لو لم يوقف التشغيل، سيتم إرسال تحذير.
أوصي بمنع هذه الحالة من الناحية العادة.
يمكن سحب كل عنصر في المتجه بشكل فردي باستخدام الرقم المطلق.
> a = c(10, 20, 30, 40, 50) > a[2] [1] 20
ملاحظة:أوصي بمنع هذه الحالة من الناحية العادة.
يمكن لـ R أيضًا سحب جزء من المتجه بسهولة:
> a[1:4] # سحب العناصر من 1 إلى 4، بما في ذلك العنصر 1 والعنصر 4 [1] 10 20 30 40 > a[c(1, 3, 5)] # سحب العناصر 1، 3، 5 [1] 10 30 50 > a[c(-1, -5)] # إزالة العنصر 1 والعنصر 5 [1] 20 30 40
هذه الطرق الثلاث لسحب الأجزاء هي الأكثر شيوعًا.
يدعم المتجه العمليات الحسابية بالعوامل:
> c(1.1, 1.2, 1.3) - 0.5 [1] 0.6 0.7 0.8 > a = c(1, 2) > a ^ 2 [1] 1 4
الوظائف الحسابية الرياضية الشائعة التي تم ذكرها من قبل، مثل sqrt و exp، يمكن أيضًا استخدامها في العمليات الحسابية للمتجهات.
يُعتبر "المتجه" كنموذج لقائمة متسلسلة، ويجب أن يكون لديه بعض الوظائف المعالجة القياسية للقوائم المتسلسلة، ويحصل R على هذه الوظائف بالفعل:
ترتيب المتجه:
> a = c(1, 3, 5, 2, 4, 6) > sort(a) [1] 1 2 3 4 5 6 > rev(a) [1] 6 4 2 5 3 1 > order(a) [1] 1 4 2 5 3 6 > a[order(a)] [1] 1 2 3 4 5 6
يستخدم وظيفة order() لتحديد مجموعة الأعمدة بعد ترتيب المتجه.
إحصاءات المتجهات
في R هناك وظائف إحصائية كاملة ومتنوعة:
اسم الوظيفة | المعنى |
---|---|
sum | حساب مجموع |
mean | حساب المعدل |
var | النسبة المئوية |
sd | الدرجة العادية |
min | القيمة الأصغر |
max | القيمة الأكبر |
range | نطاق القيم (متجه ثنائي، القيمة الأكبر والقيمة الأصغر) |
مثال على الإحصاءات المتجهية:
> sum(1:5) [1] 15 > sd(1:5) [1] 1.581139 > range(1:5) [1] 1 5
توليد المتجهات
توليد المتجهات يمكن أن يتم باستخدام c() ويمكنك أيضًا توليد السلسلة باستخدام عمليات min:max.
إذا كنت ترغب في توليد سلسلة أسيطرية من الفجوات المتساوية، يمكنك استخدام seq الوظيفة:
> seq(1, 9, 2) [1] 1 3 5 7 9
seq يمكنه توليد سلسلة الأعداد الصحيحة من m إلى n، ويكفي فقط تحديد m، n وعدد العناصر في السلسلة:
seq(0, 1, length.out=3) [1] 0.0 0.5 1.0
rep تعني repeat (تكرار)، يمكن استخدامها لإنشاء سلسلة من الأرقام المكررة:
rep(0, 5) [1] 0 0 0 0 0
يستخدم NA وNULL في المصفوفات بشكل شائع، سأشرح الفرق بينهما:
NA يمثل "مفقود"،NULL يمثل "غير موجود".
NA هو مكانة بديلة، يمثل عدم وجود قيمة ولكن المكان موجود.
NULL يمثل عدم وجود بيانات.
شرح مثال:
length(c(NA, NA, NULL)) [1] 2 c(NA, NA, NULL, NA) [1] NA NA NA
من الواضح أن NULL في المصفوفة لا يمثل أي شيء.
الصفوف المنطقية تستخدم لعمليات منطقية المصفوفات، مثل:
c(1, 2, 3) > 2 [1] FALSE FALSE TRUE
which هي دالة معالجة مصفوفة منطقية شائعة جدًا، يمكن استخدامها لتحديد العناصر التي نحتاجها من البيانات:
a = c(1, 2, 3) b = a > 2 print(b) [1] FALSE FALSE TRUE which(b) [1] 3
على سبيل المثال، نحتاج إلى فرز البيانات من قائمة خطية أكبر من 60 وأقل من 70:
vector = c(10, 40, 78, 64, 53, 62, 69, 70) print(vector[which(vector >= 60 & vector < 70)]) [1] 64 62 69
هناك دوال مشابهة مثل all و any:
all(c(TRUE, TRUE, TRUE)) [1] TRUE all(c(TRUE, TRUE, FALSE)) [1] FALSE any(c(TRUE, FALSE, FALSE)) [1] TRUE any(c(FALSE, FALSE, FALSE)) [1] FALSE
all() يستخدم لتحقق ما إذا كانت المصفوفة منطقية تحتوي على TRUE كله،any() يستخدم لتحقق ما إذا كانت المصفوفة منطقية تحتوي على TRUE.
النوع البياني لل نص ليس معقدًا جدًا، هنا يتم التركيز على شرح دالة معالجة النص:
toupper("w3codebox") # 转换为大写 [1] "w3codebox" tolower("w3codebox") # 转换为大写 [1] "w3codebox" nchar("中文", type="bytes") # 统计字节长度 [1] 4 > nchar("中文", type="char") # 总计字符数量 [1] 2 > substr("123456789", 1, 5) # 截取字符串,从 1 到 5 [1] "12345" > substring("1234567890", 5) # 截取字符串,从 5 到结束 [1] "567890" > as.numeric("12") # 将字符串转换为数字 [1] 12 > as.character(12.34) # 将数字转换为字符串 [1] "12.34" > strsplit("2019;10;1", ";") # 分隔符拆分字符串 [[1]] [1] "2019" "10" "1" > gsub("/", "-", "2019/10/1") # 替换字符串 [1] "2019-10-1"
在 Windows 计算机上实现,使用的是 GBK 编码标准,所以一个中文字符是两个字节,如果在 UTF-8 编码的计算机上运行,单个中文字符的字节长度应该是 3。
R 支持 perl 语言格式的正则表达式:
> gsub("[[:alpha:]]+", "$", "Two words") [1] "$ $"
更多字符串内容参考:R 语言字符串介绍.
R 语言为线性代数的研究提供了矩阵类型,这种数据结构很类似于其它语言中的二维数组,但 R 提供了语言级的矩阵运算支持。
首先看看矩阵的生成:
> vector=c(1, 2, 3, 4, 5, 6) > matrix(vector, 2, 3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
矩阵初始化内容是由一个向量来传递的,其次要表达一个矩阵有几行、有几列。
向量中的值会一列一列的填充到矩阵中。如果想按行填充,需要指定 byrow 属性:
> matrix(vector, 2, 3, byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6
矩阵中的每一个值都可以被直接访问:
> m1 = matrix(vector, 2, 3, byrow=TRUE) > m1[1,1] # السطر الأول والعمود الأول [1] 1 > m1[1,3] # السطر الأول والعمود الثالث [1] 3
كل عمود وكل صف في matrix في R يمكن تحديد اسمه، ويمكن إكمال هذا العمل من خلال vector من الأسماء
> colnames(m1) = c("x", "y", "z") > rownames(m1) = c("a", ) > m1 x y z a 1 2 3 b 4 5 6 > m1["a", ] x y z 1 2 3
عمليات الجمع في الصفوف في matrix تتشابه مع العمليات في الوظائف، يمكنها القيام بالعمليات مع القيم النسبية أو مع الصفوف من نفس الحجم
عمليات الجمع بين الصفوف:
> m1 = matrix(c(1, 2), 1, 2) > m2 = matrix(c(3, 4), 2, 1) > m1 %*% m2 [,1] [1,] 11
مatrice عكسية:
> A = matrix(c(1, 3, 2, 4), 2, 2) > solve(A) [,1] [,2] [1,] -2.0 1.0 [2,] 1.5 -0.5
يمكن للـ apply() function أن تستخدم كل صف أو عمود من الصفوف كـ vector للعمل
> (A = matrix(c(1, 3, 2, 4), 2, 2)) [,1] [,2] [1,] 1 2 [2,] 3 4 > apply(A, 1, sum) # ثاني parameter هو 1 العمل بالسطر، باستخدام function sum() [1] 3 7 > apply(A, 2, sum) # ثاني parameter هو 2 العمل بالعمود [1] 4 6
المزيد من محتويات الصفوف مراجعة:الصفوف في R.