#include <Rdefines.h>
SEXP df_fun(SEXP df)
{
int i, len = Rf_length(df);
SEXP result;
PROTECT(result = NEW_CHARACTER(len));
for (i = 0; i < len; ++i)
switch(TYPEOF(VECTOR_ELT(df, i))) {
case INTSXP:
SET_STRING_ELT(result, i, mkChar("integer"));
break;
case REALSXP:
SET_STRING_ELT(result, i, mkChar("numeric"));
break;
default:
SET_STRING_ELT(result, i, mkChar("other"));
break;
};
UNPROTECT(1);
return result;
}
की तर्ज पर और उसके बाद के बाद इतनी R CMD SHLIB df_fun.c
> dyn.load("df_fun.so")
> df=data.frame(x=1:5, y=letters[1:5], z=pi, stringsAsFactors=FALSE)
> .Call("df_fun", df)
[1] "integer" "other" "numeric"
GET_CLASS
, GET_ATTR
का उपयोग करें और डेटा फ्रेम के बारे में अन्य जानकारी खोजने के लिए Rdefines.h (या उनके समकक्ष कार्यों, जैसे getAttrib
) में अन्य मैक्रोज़। ध्यान दें कि डेटा.फ्रेम में एक एपीआई है जो इसकी संरचना से भिन्न हो सकती है। तो उदाहरण के लिए आर फ़ंक्शन row.names
पंक्ति.नाम विशेषता में संग्रहीत मान से कुछ अलग कर सकता है। मुझे लगता है कि अधिकांश .Call
कार्य आर स्तर पर अधिक जटिल वस्तुओं के हेरफेर को बनाए रखते हुए परमाणु वैक्टर पर काम करते हैं।
स्रोत
2011-07-12 05:14:46
यह वही है जो मैं ढूंढ रहा था। धन्यवाद मार्टिन। डेटा फ्रेम (nrows, rownames, colnames, is.factor इत्यादि) के अन्य गुण क्या हैं? क्या मैं एक डीएफ पास करते समय क्वेरी कर सकता हूं और डीएफ लौटने पर सेट कर सकता हूं? आरटी – user151410
मैंने उत्तर –
उत्तर के अंत में इसके बारे में कुछ वाक्य जोड़े। यह सहायता करता है। आर टी – user151410