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

BugTrack-£ÒÈ÷˺Ͽ/20

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

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

R¡ÊR¸À¸ì¡Ë¤ÇÊÂÎó½èÍý - multicore

  • Åê¹Æ¼Ô¡§ ¤ß¤å
  • ¥«¥Æ¥´¥ê¡§ ¤Ê¤·
  • Í¥ÀèÅÙ¡§ ÉáÄÌ
  • ¾õÂÖ¡§ ´°Î»
  • Æü»þ¡§ 2009ǯ01·î17Æü 21»þ55ʬ10ÉÃ

ÆâÍÆ

´Êñ¤ÊÀâÌÀ

  • º£¼Â¹Ô¤·¤Æ¤¤¤ëR¤Î´Ä¶­¤È¤Þ¤Ã¤¿¤¯Æ±¤¸¥×¥í¥»¥¹¤òºî¤ê¤Þ¤¹¡¥¤Ä¤Þ¤ê¼«Ê¬¼«¿È¤Î¥¯¥í¡¼¥ó¤ò¡Ö»Ò¥×¥í¥»¥¹¡×¤È¤·¤Æ¡¢¼Â¹Ô¡¥
    • Rserve¤Ê¤ó¤«¤È¤¤¤Ã¤·¤ç¤Ç¤¹¤Í¡¥
  • ¤½¤Î¡Ö»Ò¥×¥í¥»¥¹¡×¤Ë¥³¥Þ¥ó¥É¤òÅϤ·¤Æ¡¢¼Â¹Ô¤µ¤»¤ë¡¥¤Ç¤½¤Î¤È¤­¡¢ÅϤ·¤¿À褬ÊÌ¤Î¥×¥í¥»¥¹¤Ê¤Î¤Ç¡¢º£¸«¤Æ¤¤¤ë¼Â¹Ô´Ä¶­¡Ê¿Æ¥×¥í¥»¥¹¡Ë¤Ë¤Ï¡¢¤Ê¤Ë¤â±Æ¶Á¤òÍ¿¤¨¤Þ¤»¤ó¡¥
  • ¤·¤«¤â¡¢¥ì¥¹¥Ý¥ó¥¹¤¬¤¹¤°µ¢¤Ã¤Æ¤¯¤ë¡Ê΢¤Ç¤ÏÊ̤ÎR¥×¥í¥»¥¹¤¬Æ°¤¤¤Æ¤¤¤ë¡Ë
  • CPU¤¬£²¸Ä°Ê¾å¤¢¤Ã¤Æ¡¢ÊÂÎó½èÍý¤Ç¤­¤ë¥¹¥¯¥ê¥×¥È¤Ê¤é¡¢¸ú²Ì¤¬¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤·¤ç¤¦¡¥
  • Ê̤ÎR¤ò¤ï¤¶¤ï¤¶Î©¤Á¾å¤²¤ë¤è¤ê²¿¤¬¤¤¤¤¤«¤È¤¤¤¦¤È
    • ¼«Ê¬¼«¿È¤Î¥¯¥í¡¼¥ó¤òfork¤¹¤ë¤Î¤Ç¡¢R¤òΩ¤Á¾å¤²¤ë¤È¤¤¤¦½Å¤¤½èÍý¤¬ÉÔÍס¥¤³¤ÎR¤òΩ¤Á¾å¤²¤ë½èÍý¤Ã¤Æ·ë¹½½Å¤¤¤ó¤Ç¤¹¤è¡¦¡¦¡¦
    • ¼«Ê¬¼«¿È¤Î¥¯¥í¡¼¥ó¤Ê¤Î¤Ç¡¢¤½¤³¤Þ¤Ç¤ËºîÀ®¤·¤¿¥á¥â¥ê¾å¤Ë¾è¤Ã¤Æ¤¤¤ëÊÑ¿ô¤ò¡¢¤½¤Î»Ò¥×¥í¥»¥¹¤Ç»²¾È¤Ç¤­¤ë¡¥
      • ¤â¤Á¤í¤ó¡¢»Ò¥×¥í¥»¥¹¤òΩ¤Á¾å¤²¤¿¸å¤ËºîÀ®¤·¤¿¿Æ¥×¥í¥»¥¹¤ÎÊÑ¿ô¤Ï¡¢»Ò¥×¥í¥»¥¹¤«¤é¤Ï¸«¤¨¤Ê¤¤¡¥
      • ¤À¤±¤É¸å¤Ç½Ò¤Ù¤ë¡¢¿Æ»Ò´Ö¤ÎÄÌ¿®¤Ç¡¢ÊÑ¿ô¤È¤¤¤¦¤«R¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¿Æ»Ò´Ö¤Ç¤ä¤ê¼è¤ê¤¹¤ë¤³¤È¤Ï¤Ç¤­¤ë¡¥
  • ¤Á¤ç¤Ã¤È¤À¤á¤Ê¤È¤³
    • ¼«Ê¬¼«¿È¤Î¥¯¥í¡¼¥ó¤òºîÀ®¤¹¤ë¤Î¤Ç¡¢¿Æ¤È¤Ê¤ëR¤¬Çϼ¯¤Ç¤«¤¤¥á¥â¥ê¤ò»È¤Ã¤Æ¤¤¤¿¤é¡¢»Ò¥×¥í¥»¥¹¤âÇϼ¯¤Ç¤«¤¯¤Ê¤ë¡¥¤â¤Á¤í¤ó¡¢»Ò¥×¥í¥»¥¹¤òºî¤Ã¤¿¸å¤Ë¡¢»Ò¥×¥í¥»¥¹¤Ç¥ª¥Ö¥¸¥§¥¯¥È¤òºï½ü¤·¤Æ£ç£ã¤¹¤ì¤Ð¥á¥â¥ê»ÈÍÑÎ̤ϸº¤ë¤±¤É¡¦¡¦¡¦
    • ¤³¤³¤À¤±µ¤¤ò¤Ä¤±¤ì¤Ð¤è¤¤¤«¤Ê¡¦¡¦¡¦¡©¤Ä¤Þ¤ê¿Æ¥×¥í¥»¥¹¤Ï¤Ê¤ë¤Ù¤¯¥¹¥ê¥à¤Ë¤·¤Æ¤ª¤¯¤³¤È¡¦¡¦¡¦
  • R¥ª¥Ö¥¸¥§¥¯¥È¤Î¥×¥í¥»¥¹´Ö¤Î¤ä¤ê¼è¤ê¤Ï¡ÚRaw Vectors¡Û¤Ç¤ä¤ê¼è¤ê¤¹¤ë¡¥¡ÚRaw Vectors¡Û¤ËÊÑ´¹¤Ç¤­¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È¤ÏÊ̤Υª¥Ö¥¸¥§¥¯¥È¤Ëʬ²ò¤·¤Æ¤ä¤ê¼è¤ê¤¹¤ëɬÍפ¬¤¢¤ë¡¥¥Ç¡¼¥¿¥Õ¥ì¡¼¥à¤Ê¤É¡¢¥ê¥¹¥È·Á¼°¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤½¤Î¤Þ¤Þ¤Ç¤Ï¡¢¡ÚRaw Vectors¡Û¤ËÊÑ´¹¤Ç¤­¤Ê¤¤¤Î¤Ç¡¢Ê¬²ò¤¹¤ëɬÍפ¬¤¢¤ë¡¥
    • ¤³¤ì¤Ê¤ó¤È¤«¤Ê¤é¤Ê¤¤¤«¤Ê¤¡¡¦¡¦¡¦

»È¤¤Êý

  • ¡Öparallel¡×¤È¤«¡Ömclapply¡×¤È¤«¡¢´Êñ¤Ë¡©»È¤¨¤ë´Ø¿ô¤â¤¢¤ë¤±¤É¡¢¤ä¤Ã¤Ñ¤ê»Ò¥×¥í¥»¥¹¤È²ñÏäò¤·¤¿¤¤¤Î¤Ç¡¢¤½¤³¤é¤Ø¤ó¤«¤é¡¥

»Ò¥×¥í¥»¥¹¤òºî¤ë

  • »Ò¥×¥í¥»¥¹¤òºî¤ê¤Þ¤¹¡¥
> f <- fork()
> >
  • ¤Ê¤ó¤È¡¢¤½¤³¤Ï»Ò¥×¥í¥»¥¹¤ÎÀ¤³¦¡¥¥¨¥ó¥¿¡¼¤Ç²þ¹Ô¤¹¤ë¤È¡¢¿Æ¤ÎÀ¤³¦¤ËÌá¤ê¤Þ¤¹¡¥
  • °ì¸ÄÌܤΡÖ>¡×¤¬¿Æ¥×¥í¥»¥¹¤Î¥×¥í¥ó¥×¥È¡¥£²¸ÄÌܤΡÖ>¡×¤¬»Ò¥×¥í¥»¥¹¤Î¥×¥í¥ó¥×¥È¡¥¤³¤Î¾õÂ֤ǰʲ¼¤Î¤è¤¦¤ËÆþÎϤ·¤Æ¤ß¤Þ¤¹¡¥
> > iris2 <- iris[,1]
    • ¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹Î¾ÊýÂÔ¤Á¼õ¤±¤Æ¤¤¤ë¤Î¤Ç¡¢¿Æ¥×¥í¥»¥¹¤Ç¤âiris2¤È¤¤¤¦¥ª¥Ö¥¸¥§¥¯¥È¤¬¤Ç¤­¤Þ¤¹¡¥
    • ¤³¤ì¤Ç¡¢»Ò¥×¥í¥»¥¹¤Îɸ½àÆþÎϤϽªÎ»¤·¤Þ¤¹¡¥

»Ò¥×¥í¥»¥¹¤«¤é¿Æ¥×¥í¥»¥¹¤Ø¥ª¥Ö¥¸¥§¥¯¥È¤òÁ÷¿®¤¹¤ë

  • ¤³¤Îiris2¤¬»Ò¥×¥í¥»¥¹¤Ç¤âºî¤é¤ì¤Æ¤¤¤ë¤«³Îǧ¤·¤Þ¤¹¡¥
> sendChildStdin(f,"sendMaster(iris2)\n")
sendMaster(iris2)
[1] TRUE
> [1] TRUE
  • »Ò¥×¥í¥»¥¹¡Ö£æ¡×¤Îɸ½àÆþÎϤˡÖsendMaster(iris2)\n¡×¤È¤¤¤¦¥³¥Þ¥ó¥É¤òÁ÷¤ê¤Þ¤¹¡¥¡ÖsendMaster¡×´Ø¿ô¤Ï¡¢»Ò¥×¥í¥»¥¹¤«¤é¿Æ¥×¥í¥»¥¹¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤ò¥×¥Ã¥·¥å¤¹¤ë´Ø¿ô¤Ç¤¹¡¥
  • ¤³¤ì¤ò¿Æ¥×¥í¥»¥¹¤Ç¼õ¤±¼è¤ê¤Þ¤¹¡¥
> s <- selectChildren(f)
> s
[1] 16340
> r <- readChild(f)
  • ¤Þ¤º¡ÖselectChildren¡×´Ø¿ô¤Ç»Ò¥×¥í¥»¥¹¤¬Æɤ߼è¤ê¤Ç¤­¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹¡¥º£¡¢Æɤ߼è¤ì¤ë¾õÂ֤ʤΤǡ¢¡ÖreadChild¡×´Ø¿ô¤ò»È¤Ã¤Æ¡¢»Ò¥×¥í¥»¥¹¤«¤éÁ÷¤é¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò¼õ¤±¼è¤ê¤Þ¤¹¡¥
  • °Ê²¼¼õ¤±¼è¤Ã¤¿¡Ö£ò¡×¤ÎÃæ¿È
> r
   [1] 58 0a 00 00 00 02 00 02 08 01 00 02 03 00 00 00 00 0e 00 00 00 96 40 14
  [25] 66 66 66 66 66 66 40 13 99 99 99 99 99 9a 40 12 cc cc cc cc cc cd 40 12
  [49] 66 66 66 66 66 66 40 14 00 00 00 00 00 00 40 15 99 99 99 99 99 9a 40 12
¡¦¡¦¡¦¡Ê³¤¯¡Ë
  • ¤³¤ì¤¬¤¤¤ï¤æ¤ë¡ÚRaw Vectors¡Û¡¥iris2¤Î¡ÚRaw Vectors¡Û¤é¤·¤¤¤Ç¤¹¡¥ÉáÄ̤Υª¥Ö¥¸¥§¥¯¥È¤Ëľ¤·¤Þ¤¹¡¥
> unserialize(r)
  [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
 [19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
 [37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
 [55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
 [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
 [91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
[109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
[127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
[145] 6.7 6.7 6.3 6.5 6.2 5.9
  • iris[,1]¤ÈƱ¤¸¤Ç¤¹¡¥

¿Æ¥×¥í¥»¥¹¤«¤é»Ò¥×¥í¥»¥¹¤Ø¥ª¥Ö¥¸¥§¥¯¥È¤òÁ÷¿®¤¹¤ë

  • ¡ÖsendChildStdin¡×´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥£²ÈÖÌܤΰú¿ô¤Ë¡ÚRaw Vectors¡Û·Á¼°¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÅϤ¹¤ÈÎɤ¤¤é¤·¤¤¡¥
> sendChildStdin(f, as.raw(r))
  • ¥Ð¥°¤Ã¤Æ¤Þ¤¹¤«¤Ê¡¦¡¦¡¦
  • ¤Ê¤é¥À¥ó¥×¤·¤¿¥Æ¥­¥¹¥È¤òÅϤ»¤Ð¤¤¤¤¤«¡¦¡¦¡¦
iris3 <- iris
textCn <- textConnection("tmp", "w")
dump("iris3", textCn)
close(textCn)
tmp
 [1] "`iris3` <-"
 [2] "structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5, 5.4, 4.6, "
 [3] "5, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, "
¡¦¡¦¡¦¡Ê³¤¯¡Ë
invisible(sendChildStdin(f, "multicore:::closeStdout()\n"))
tmp <- paste("invisible(", paste(tmp, collapse="\n"), ")\n", sep="")
sendChildStdin(f, tmp)
  • ¤³¤ì¤Ç¤Ç¤­¤Æ¤¤¤ë¤Ï¤º¡¥
  • ¡ÖsendChildStdin(f, "multicore:::closeStdout()\n")¡×¤Ï»Ò¥×¥í¥»¥¹¤Î¤Û¤¦¤Ç¡¢½ÐÎϤµ¤ì¤ëɸ½à½ÐÎϤòÍÞÀ©¤¹¤ë¡¥¤³¤ì¤¬¤Ê¤¤¤È¡¢¤¤¤Á¤¤¤Áɽ¼¨¤¬¤µ¤ì¤Æ¤ß¤Ë¤¯¤¤¤Î¤Ç¡¥¤Ç¤â³«È¯Ã桦¥Ç¥Ð¥Ã¥°Ãæ¤Ï½ÐÎϤϤ¢¤Ã¤¿¤Û¤¦¤¬¤¤¤¤¤Ç¤¹¤Í¡¦¡¦¡¦
  • ¤³¤Î¸å¤í¤Î¤Û¤¦¤Î¡Ö»Ò¥×¥í¥»¥¹Æâ¤Ç¥³¥Þ¥ó¥É¤òɾ²Á¤¹¤ë´Ø¿ô¤òºî¤ë¡×¤ò¤´»²¾È¤¯¤À¤µ¤¤

parallel

  • ¤¤¤Á¤¤¤Á¡¢É¸½à½ÐÎϤòÍÞÀ©¤¹¤ë¤Î¤È¤«¤á¤ó¤É¤¯¤µ¤¤¤Î¤Ç»Ò¥×¥í¥»¥¹ºî¤ë¤È¤­¤Ï¡Öparallel¡×»È¤Ã¤¿¤Û¤¦¤¬Îɤ¤¤«¤â¡¥
> f <- parallel(1:10, silent = T)
> f
 parallelJob: processID=16533
  • ¡Ö£±¡§£±£°¡×¤Î¤È¤³¤í¤Ï¡¢²¿¤Ç¤â¤¤¤¤¤Ç¤¹¡¥¡Ösilent = T¡×¤Ç¡¢¡Ömulticore:::closeStdout()¡×¤ò´Ø¿ôÆâÉô¤Ç¤ä¤Ã¤Æ¤¯¤ì¤Þ¤¹¡¥
  • ¤¿¤À¤·¡¢¤³¤Î¤Þ¤Þ¤À¤È¡Ö£±¡§£±£°¡×¤Î·ë²Ì¤ò¿Æ¥×¥í¥»¥¹¤ËÊÖ¤½¤¦¤È¤·¤Æ¤¤¤ë¤Î¤Ç¡¢
collect(f)
  • ¤Ç¡¢·ë²Ì¤ò¼õ¤±¼è¤Ã¤Æ¤ª¤¤¤¿¤Û¤¦¤¬Îɤ¤¡©
> collect(f)
$`16589`
 [1]  1  2  3  4  5  6  7  8  9 10
  • ¤³¤Î»Ò¥×¥í¥»¥¹¤ò£±¸Äºî¤Ã¤¿¾õÂ֤ǡ¢°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥
$ ps -ejH
¡¦¡¦¡¦
12488 12488 12488 pts/2    00:00:00     bash
16584 16584 12488 pts/2    00:00:00       R
16589 16584 12488 pts/2    00:00:00         R
¡¦¡¦¡¦

»Ò¥×¥í¥»¥¹¤«¤é¿Æ¥×¥í¥»¥¹¤Ø¥ª¥Ö¥¸¥§¥¯¥È¤òÁ÷¿®¤¹¤ë­¢

  • Àè¤Û¤É»Ò¥×¥í¥»¥¹¤«¤é¿Æ¥×¥í¥»¥¹¤Ø¥ª¥Ö¥¸¥§¥¯¥È¤òÅϤ¹¤È¤­¤Ë¡¢¤¤¤í¤¤¤í¤È¤á¤ó¤É¤¯¤µ¤¤¤³¤È¤ò¤·¤¿¤±¤ì¤É¡¢¡Öcollect¡×´Ø¿ô¤ò»È¤¦¤È¤â¤·¤«¤·¤Æ¤é¤¯¤Á¤ó¡©
sendChildStdin(f,"iris4 <- iris[,2]\n")
sendChildStdin(f,"sendMaster(iris4)\n")
collect(f)
  • ¼Â¹Ô
> sendChildStdin(f,"iris4 <- iris[,2]\n")
Error in FUN(16589L[[1L]], ...) : child 16589 doesn't exist
  • ¤Ã¤Æ¡¢»Ò¥×¥í¥»¥¹¤¬¤¤¤Ê¤¡¤¡¤¡¤¡¤¤¡¥
12488 12488 12488 pts/2    00:00:00     bash
16584 16584 12488 pts/2    00:00:00       R
16589 16584 12488 pts/2    00:00:00         R <defunct>
  • ¤ª¤Ê¤¯¤Ê¤ê¤Ë¤Ê¤Ã¤Æ¤Þ¤¹¡¦¡¦¡¦¡¥»ÅÍͤǤ¹¤«¡©¡Öcollect¡×¤·¤¿¤é¥×¥í¥»¥¹»¦¤·¤Á¤ã¤¦¤ó¤À¤í¤¦¤«¡¦¡¦¡¦
    • ¤É¤¦¤â¡Öparallel¡×´Ø¿ô¤ÎÃæ¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¤òÅϤ·¤¿¸å¤Ë¡¢¡Öexit(0)¡×¤È¤¤¤¦¤Î¤Ç¡¢»¦¤·¤Á¤ã¤Ã¤Æ¤ë¤ß¤¿¤¤¤Ç¤¹¡¥¡Öparallel¡×¤ò»²¹Í¤Ë´Ø¿ô¤òºî¤Ã¤Æ¤ß¤¿¡¥
createChild <-
function (name, mc.set.seed = FALSE, silent = FALSE)
{
    f <- fork()
    env <- parent.frame()
    if (inherits(f, "masterProcess")) {
        #on.exit(exit(1, structure("fatal error in wrapper code",
        #    class = "try-error")))
        if (isTRUE(mc.set.seed))
            set.seed(Sys.getpid())
        if (isTRUE(silent))
            multicore:::closeStdout()
        #sendMaster(try(eval(expr, env), silent = TRUE))
        #exit(0)
    }
    if (!missing(name) && !is.null(name))
        f$name <- as.character(name)[1]
    class(f) <- c("parallelJob", class(f))
    f
}
  • ¤³¤ì¤Ç¤É¤¦¤«¤Ê
> f <- createChild(silent = T)
> f
 parallelJob: processID=16756
> sendChildStdin(f,"iris4 <- iris[,2]\n")
[1] TRUE
> sendChildStdin(f,"sendMaster(iris4)\n")
[1] TRUE
> collect(f,wait=F)
[[1]]
  [1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4 3.9 3.5
 [19] 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2
 [37] 3.5 3.6 3.0 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3
 [55] 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7 2.2 2.5 3.2 2.8
 [73] 2.5 2.8 2.9 3.0 2.8 3.0 2.9 2.6 2.4 2.4 2.7 2.7 3.0 3.4 3.1 2.3 3.0 2.5
 [91] 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7 3.0 2.9 3.0 3.0 2.5 2.9
[109] 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0 3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2
[127] 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0 3.4 3.1 3.0 3.1 3.1 3.1 2.7 3.2
[145] 3.3 3.0 2.5 3.0 3.4 3.0

> collect(f,wait=F)
NULL
  • »Ò¥×¥í¥»¥¹¤â»à¤ó¤Ç¤Ê¤¤¤Î¤ÇOK

»Ò¥×¥í¥»¥¹¤Î½ªÎ»¤Î»ÅÊý

  • ÀµÄ¾¡¢¾¡¼ê¤Ë»à¤ó¤Ç¤ë¤³¤È¤¬Â¿¤¤¤Î¤ÇÎɤ¯¤ï¤«¤ê¤Þ¤»¤ó¡¦¡¦¡¦¡¥¤¬
kill(f, SIGQUIT)
  • ¤Ç¡¢ÌÀ¼¨Åª¤Ë
16790 16584 12488 pts/2    00:00:00         R <defunct>
  • ¤³¤¦¤¤¤¦¾õÂ֤ˤϤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥<defunct>¤Ë¤·¤Ê¤¤¤Ç¡¢¿Æ¥×¥í¥»¥¹¤ÎR¤ò½ªÎ»¤·¤Æ¤·¤Þ¤¦¤È
16684 16584 12488 pts/2    00:00:00   R
16685 16584 12488 pts/2    00:00:00   R
16740 16584 12488 pts/2    00:00:00   R
16754 16584 12488 pts/2    00:00:00   R
16755 16584 12488 pts/2    00:00:00   R
  • ¤³¤ó¤Ê¤Ò¤É¤¤¤³¤È¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¤´Ãí°Õ¡¥
  • ¿Æ¤ÎRÆâ¤Ç¡¢»Ò¥×¥í¥»¥¹¤Î¥Õ¥©¡¼¥«¥¹¤¬¤Ê¤¯¤Ê¤ëÁ°¤Ë¡Ökill(***, SIGQUIT)¡×¤Ç<defunct>¤Ë¤·¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡¥
  • ¤È¤¤¤¦¤«¡ÖRserve¡×¤ß¤¿¤¤¤Ë¡¢¤­¤Á¤ó¤È½ª¤ï¤ëÊýË¡¤Ï¤Ê¤¤¤ó¤Ç¤¹¤«¡©¡©¡©

rmChild

  • ¡ÖrmChild¡×¤È¤¤¤¦´Ø¿ô¤òȯ¸«¡¥¤³¤ì¤Ç»Ò¥×¥í¥»¥¹¤òÍî¤È¤¹¤³¤È¤¬¤Ç¤­¤½¤¦¡¥
    • ¥Þ¥Ë¥å¥¢¥ë¤Ë¤ÏºÜ¤Ã¤Æ¤Ê¤¤¤Í¡¦¡¦¡¦
> kill(f, SIGQUIT)
> multicore:::rmChild(f)
[1] TRUE
  • »Ò¥×¥í¥»¥¹¤³¤ì¤Ç¤Ï¡¢Íî¤Á¤Þ¤»¤ó¤Í¡¦¡¦¡¦

»Ò¥×¥í¥»¥¹Æâ¤Ç¥³¥Þ¥ó¥É¤òɾ²Á¤¹¤ë´Ø¿ô¤òºî¤ë

childEval <-
function( child, cmd, send=F ){
    if( !is.character(cmd) ){
        print("'cmd' must be character...")
        return
    }
    #cmd <- paste(cmd, "\n", sep="")
    if( send ) cmd <- paste("sendMaster(try({",cmd,"}, silent=T))\n", sep="")
    else cmd <- paste("try({",cmd,"}, silent=T)\n", sep="")
    #cat(cmd)
    ret <- sendChildStdin(child, cmd)
    s <- selectChildren(child)
    if (is.logical(s) || !length(s)){
        
    } else{
        cat("ready to get data...\n")
    }
    #if( is.numeric(s) ) cat("ready to get data...\n")
    ret
}
  • ¥Æ¥¹¥È
childEval(f, "x<-1:10")
collect(f, wait=F)

¿Æ¥×¥í¥»¥¹¤«¤é»Ò¥×¥í¥»¥¹¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤ò¤ï¤¿¤¹

  • ·ë¶É¡ÖsendChildStdin¡×´Ø¿ô¤ÇÀ¸¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¤½¤Î¤Þ¤ÞÅϤ¹¤³¤È¤Ï¤Ç¤­¤Ê¤¤¤Î¤Ç¡¥
textCn <- textConnection("sendCmd", "w")
dump("iris3", textCn)
close(textCn)
sendCmd
 [1] "`iris3` <-"
 [2] "structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6, 5, 5.4, 4.6, "
 [3] "5, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, "
¡¦¡¦¡¦¡Ê³¤¯¡Ë
#sendCmd <- paste("invisible(", paste(sendCmd, collapse="\n"), ")\n", sep="")
sendCmd <- paste(sendCmd, collapse="\n")
childEval(f, sendCmd)
#sendChildStdin(f, sendCmd)
  • ¤Ò¤È¤Ä¤Î´Ø¿ô¤Ë¤Þ¤È¤á¤ë
sendObj2Child <-
function( child, obj ){
    textCn <- textConnection("sendCmd", "w")
    dump(deparse(substitute(obj)), textCn)
    close(textCn)
    sendCmd <- paste(sendCmd, collapse="\n")
    #cat(sendCmd)
    childEval(child, sendCmd)
}
  • ¤À¤±¤É·ë¶É¡¢Ê¸»úÎó¤ÎŤµ¤Ë¤âÀ©¸Â¤¬¤¢¤ë¤Î¤Ç¡¢¤³¤ì¤â°ìÈÌŪ¤Ë¤Ï»È¤¨¤Ê¤¤¡¥
    • ¾®¤µ¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤·¤«»È¤¨¤Þ¤»¤ó¡¥

¡ß»Ò¥×¥í¥»¥¹¤«¤é¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ¤¹¤ë´Ø¿ô¤òºî¤ë¡ß

getObj <-
function( child, what ){
    if( !is.character(what) ){
        print("'what' must be character...")
        return
    }
    cmd <- paste("sendMaster(try({",what,"}, silent=T))\n", sep="")
    print(cmd)
    ret <- sendChildStdin(child, cmd)
    s <- selectChildren(child)
    if( is.numeric(s) ) return( collect(child, wait=F) )
    NA
}
  • ¥Æ¥¹¥È
getObj (f, "x")
  • ¤³¤Ã¤Á¤Ï¤Ä¤«¤¨¤Ê¤¤¤Ê¡¦¡¦¡¦

¥³¥á¥ó¥È