//¤³¤Î¥Ú¡¼¥¸¤¬É½¼¨¤µ¤ì¤ëÊý¤Ï¡¢URL¤«¤é¡Öaction=SOURCE&¡×¤òºï½ü¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤ [[£ÒÈ÷˺Ͽ - µ­»ö°ìÍ÷]] !!!C¸À¸ì¤ÎAPI tips­£¡Êʸ»úÎó¤òeval¤¹¤ë¡¦Ê¸»úÎó¤ò¼Â¹Ô¤¹¤ë¡Ë *Åê¹Æ¼Ô¡§ ¤ß¤å *¥«¥Æ¥´¥ê¡§ ¤Ê¤· *Í¥ÀèÅÙ¡§ ÉáÄÌ *¾õÂÖ¡§ ´°Î» *Æü»þ¡§ 2009ǯ06·î09Æü 08»þ28ʬ13Éà //{{bugstate}} !!ÆâÍÆ *ʸ»úÎó¤ò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¤·¤Ê¤¯¤Æ¤â¡¢¤è¤¤¤Î¤«¤Ê¡¦¡¦¡¦¡© !!¥³¥á¥ó¥È //{{comment}}