نوع بيانات فئة الإكراه في R باستخدام as
سؤال
أفهم أنه في R لديك بعض أنواع البيانات الأساسية (vector, matrix, list, data.frame
) ثم في حزم R لديك بعض الأنواع المتقدمة التي تسمى فئة S3 أو فئة S4 (ppp
,owin
, spatialPointsDataFrame
واشياء أخرى عديدة.بعض الوظائف في حزم R تعمل فقط مع وسيطات من نوع خاص.
أحتاج إلى شرح حول التحويل بين الفئات وأنواع البيانات المختلفة في R:
في بعض الأحيان يمكنني استخدام رمز مثل:
m = c(1, 2, 3, 4)
df = as.data.frame(m)
لكن في حالات أخرى يجب علي استخدام رمز مثل:
shp = readShapeSpatial("polygons.shp")
win = as(shp,"owin")
كيف أعرف بناء جملة as
لاستخدامها في أي كائن؟أم أن بناء الجملة: as.foo(originalObject)
يعادل دائما as(originalObject, "foo")
(هنا foo يشير إلى الفئة التي أريد تحويل الكائن إليها حتى أتمكن من استخدامها في وظيفة تتطلب أن تكون حجتها foo
فصل)
لنفترض أنني أستخدم حزمة في R مع فصل دراسي foo
.ولدي متغير v
الذي ينتمي إلى الطبقة bar
(بعبارة أخرى، class(v)
يكون bar
).كيف أعرف إذا كانت الدالة as(v,"foo")
سيعمل؟
المحلول
as.data.frame
هي طريقة S3 يمكنك التحقق منها foo
استخدام :
getS3method('as.data.frame','foo')
ولكن أعتقد أنك تبحث عن (كما هو مذكور)
showMethods(coerce)
سيعطيك هذا قائمة بوظائف الإكراه المحددة مسبقًا.
لتعريف وظيفة الإكراه، هناك خيار واحد (هناك العديد من الخيارات مثل setIS
, coerce<-
والإكراه الضمني من خلال الميراث) هو الاستخدام setAs
.هنا مثال:
track <- setClass("track",
slots = c(x="numeric", y="numeric"))
setAs("track", "numeric", function(from) from@y)
t1 <- new("track", x=1:20, y=(1:20)^2)
as(t1, "numeric")
الآن إذا قمت بالتحقق باستخدام:
showMethods(coerce)
تحصل على إدخال مع:
from="track", to="numeric"
للحصول على شرح أفضل يجب أن تقرأ مساعدة ("كما") ولكن الموضوع ليس بسيطا جدا.
يحرر لإظهار الإدخالات ذات المسار فقط، يمكنك القيام بذلك على سبيل المثال:
cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"