¥È¥Ã¥× º¹Ê¬ °ìÍ÷ ¥½¡¼¥¹ ¸¡º÷ ¥Ø¥ë¥× RSS ¥í¥°¥¤¥ó

BugTrack-£ÒÈ÷˺Ͽ/32

£ÒÈ÷˺Ͽ /¾õÂÖ¶õ´Ö¥â¥Ç¥ê¥ó¥°/donlp2/¤½¤Î¾¤Î¥á¥â

£ÒÈ÷˺Ͽ - µ­»ö°ìÍ÷

C¸À¸ì¤ÎAPI tips­£¡Êʸ»úÎó¤òeval¤¹¤ë¡¦Ê¸»úÎó¤ò¼Â¹Ô¤¹¤ë¡Ë

  • Åê¹Æ¼Ô¡§ ¤ß¤å
  • ¥«¥Æ¥´¥ê¡§ ¤Ê¤·
  • Í¥ÀèÅÙ¡§ ÉáÄÌ
  • ¾õÂÖ¡§ ´°Î»
  • Æü»þ¡§ 2009ǯ06·î09Æü 08»þ28ʬ13ÉÃ

ÆâÍÆ

  • ʸ»úÎó¤òeval¤¹¤ë¡¦Ê¸»úÎó¤ò¼Â¹Ô¤¹¤ë

ʸ»úÎó¤òeval¤¹¤ë¡¦Ê¸»úÎó¤ò¼Â¹Ô¤¹¤ë

  • Î㤨¤Ð°Ê²¼¤ò¼Â¹Ô¤·¤¿¤¤
strsplit(paste(" ", string1, sep=""),  NULL)[[1]]
  • ¤³¤ó¤Ê´¶¤¸¡©
  char *cmd2 = "strsplit(paste(\" \", string1, sep=\"\"),  NULL)[[1]]";  //ʸ»úÎó¤òºîÀ®
  SET_STRING_ELT(cv, 0, mkChar(cmd2));  //ʸ»úÎóÊÑ¿ô¤ËÆþ¤ì¤ë
  call = R_ParseVector(cv, 1, &status);  //ɾ²Á¤·¤¿¤¤¼°¡Ê¤¢¤ë¤¤¤Ï²þ¹Ô¡Ë¤Î¸Ä¿ô¤¬¤ï¤«¤Ã¤Æ¤¤¤ë¾ì¹ç
  //call = parseString(cmd1, &parts, &status);  //¤ï¤«¤é¤Ê¤¤¾ì¹ç¡Ê¤Ä¤Þ¤ê¤É¤ó¤Êʸ»úÎó¤¬Íè¤Æ¤âÎɤ¤¾ì¹ç¡Ë¤Ï¤³¤ì
  PROTECT(call2 = lang2(install("eval"), call));  //eval´Ø¿ô¤Ë¥»¥Ã¥È¤¹¤ë
  PROTECT(s1 = eval(call2, rho));  //ɾ²Á¤¹¤ë¤È¡¢Ìá¤êÃͤ¬s1¤ËÆþ¤ë
  • ¤³¤ì¤ò»È¤¦¤È¡¢£Ò¦¤ÇÄêµÁ¤·¤¿´Ø¿ô¤ò£Ã¤ÎÃæ¤Çɾ²Á¡Ê¼Â¹Ô¡Ë¤Ç¤­¤ë

parseString´Ø¿ô¡¢³Î¤«¡¢Rserve¤Ë½ñ¤¤¤Æ¤¢¤Ã¤¿´Ø¿ô

SEXP parseString(char *s, int *parts, ParseStatus *status) {
    int maxParts=1;
    char *c=s;
    SEXP cv, pr = R_NilValue;
    while (*c) {
		if (*c=='\n' || *c==';') maxParts++;
		c++;
    }
    PROTECT(cv=allocVector(STRSXP, 1));
    SET_VECTOR_ELT(cv, 0, mkChar(s));  
    while (maxParts>0) {
		pr=R_ParseVector(cv, maxParts, status);
		if (*status!=PARSE_INCOMPLETE && *status!=PARSE_EOF) break;
		maxParts--;
    }
    UNPROTECT(1);
    *parts=maxParts;
    return pr;
}
  • ¡ÖSEXP pr = R_NilValue;¡×¤Î¤è¤¦¤Ë¡¢¥Ý¥¤¥ó¥¿¤Î¾ì½ê¤òÀè¤Ë³ÎÊݤ·¤Æ¤ª¤±¤Ð¡¢¤³¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤·¤¿Àè¤Ç¡¢PROTECT¤·¤Ê¤¯¤Æ¤â¡¢¤è¤¤¤Î¤«¤Ê¡¦¡¦¡¦¡©

¥³¥á¥ó¥È