2016-02-18 14 views
7

में मौजूदा कनेक्शन से पढ़ना मैं एक मनमानी आर कनेक्शन (?connections के अर्थ में) से पढ़ने में सक्षम होना चाहता हूं, जो उपयोगकर्ता द्वारा आर फ़ंक्शन को पास किया जाएगा और फिर नीचे कुछ सी कोड .Call के माध्यम से।आर: संकलित कोड

आर एपीआई, फ़ाइल R_ext/Connections.h में एक समारोह, R_ReadConnection है, जो अपने पहले तर्क के रूप में एक Rconn struct करने के लिए एक सूचक लेता है निर्दिष्ट करता है, और जो मैं चाहता है। संरचना को हेडर में भी परिभाषित किया गया है, लेकिन मुझे getConnection (सी फ़ंक्शन) से अलग, उस प्रकार की संरचना को पुनर्प्राप्त करने का कोई तरीका नहीं दिखता है, जो कि एपीआई का हिस्सा नहीं है। जहां तक ​​मैं कह सकता हूं, कनेक्शन से जुड़े बाहरी सूचक भी संरचना को सीधे इंगित नहीं करते हैं।

तो, क्या कोई मुझे बता सकता है कि एक उपयुक्त SEXP को Rconn संरचना में एक सूचक में परिवर्तित करने का एक समर्थित तरीका है या नहीं?

अग्रिम धन्यवाद।

उत्तर

1

आर एपीआई समारोह R_GetConnection() आर 3.3.0 में जोड़ा गया है, documented in NEWS के रूप में। यह SEXP से Rconn (a.k.a. Rconnection) पर रूपांतरण करने के लिए रूपांतरण करता है। इसलिए, समाधान अब

#include <R_ext/Connections.h> 

SEXP myfunction (SEXP conn_) 
{ 
    Rconnection conn = R_GetConnection(conn_); 
    // Do something with the connection 

    return R_NilValue; 
} 
+0

आर से इसे कॉल करने का सही तरीका क्या है? क्या यह 'होगा (" myfunction ", textConnection (LETTERS))?' – logworthy

+0

हाँ, यह काम करना चाहिए। –

1

मुझे नहीं लगता कि यह है (यह एक निरीक्षण है, मुझे लगता है)। वैकल्पिक हल के लिए एक उपयुक्त प्रोटोटाइप घोषित करने और उपयोग करने के लिए है यह

Rconnection getConnection(int n); 

SEXP connect_me(SEXP conn) { 
    getConnection(INTEGER(conn)[0]); 
    return R_NilValue; 
} 
+0

धन्यवाद। यह कार्यात्मक रूप से काम करता है, लेकिन आर गैर-एपीआई कॉल के बारे में शिकायत करता है, इसलिए मुझे लगता है कि यह मार्ग प्रकाशित पैकेज के लिए बाहर है –

संबंधित मुद्दे