<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Probability &#187; R</title>
	<atom:link href="http://ieqi.net/category/r/feed/" rel="self" type="application/rss+xml" />
	<link>http://ieqi.net</link>
	<description>我们必须知道，我们必将知道。</description>
	<lastBuildDate>Mon, 14 Nov 2011 08:25:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>R中的Google图表工具</title>
		<link>http://ieqi.net/2011/04/01/r%e4%b8%ad%e7%9a%84google%e5%9b%be%e8%a1%a8%e5%b7%a5%e5%85%b7/</link>
		<comments>http://ieqi.net/2011/04/01/r%e4%b8%ad%e7%9a%84google%e5%9b%be%e8%a1%a8%e5%b7%a5%e5%85%b7/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 13:58:19 +0000</pubDate>
		<dc:creator>G_will</dc:creator>
				<category><![CDATA[G_will`s Redemption]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[可视化]]></category>
		<category><![CDATA[图表]]></category>

		<guid isPermaLink="false">http://ieqi.net/?p=814</guid>
		<description><![CDATA[这是我一直想做的事情，没想到人家已经完成了，唉，太失败了我。 进入正题： R中的googleVis包，提供了R与Google 图表API的一个接口。 具体见： http://cran.r-project.org/web/packages/googleVis/index.html 这样就能直接在R中调用漂亮的Google的图表了。 这是一个范例： library(googleVis) data(Fruits) M1 &#60;- gvisMotionChart(Fruits, idvar=”Fruit”, timevar=”Year”) plot(M1) 漂亮吧？ 可以花点时间研究一下这个玩意。]]></description>
			<content:encoded><![CDATA[<p>这是我一直想做的事情，没想到人家已经完成了，唉，太失败了我。</p>
<p>进入正题：</p>
<p><span id="more-814"></span></p>
<p>R中的googleVis包，提供了R与Google 图表API的一个接口。</p>
<p>具体见：</p>
<p>http://cran.r-project.org/web/packages/googleVis/index.html</p>
<p>这样就能直接在R中调用漂亮的Google的图表了。</p>
<p>这是一个范例：</p>
<pre>
library(googleVis)

data(Fruits)

M1 &lt;- gvisMotionChart(Fruits, idvar=”Fruit”, timevar=”Year”)

plot(M1)
</pre>
<p>漂亮吧？</p>
<p>可以花点时间研究一下这个玩意。</p>
]]></content:encoded>
			<wfw:commentRss>http://ieqi.net/2011/04/01/r%e4%b8%ad%e7%9a%84google%e5%9b%be%e8%a1%a8%e5%b7%a5%e5%85%b7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>R一些记录</title>
		<link>http://ieqi.net/2010/07/03/r%e4%b8%80%e4%ba%9b%e8%ae%b0%e5%bd%95/</link>
		<comments>http://ieqi.net/2010/07/03/r%e4%b8%80%e4%ba%9b%e8%ae%b0%e5%bd%95/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 11:49:02 +0000</pubDate>
		<dc:creator>G_will</dc:creator>
				<category><![CDATA[R]]></category>

		<guid isPermaLink="false">http://ieqi.com/?p=580</guid>
		<description><![CDATA[包更新是什么来着？ Rserve如何接收图片？]]></description>
			<content:encoded><![CDATA[<p>包更新是什么来着？</p>
<p>Rserve如何接收图片？</p>
]]></content:encoded>
			<wfw:commentRss>http://ieqi.net/2010/07/03/r%e4%b8%80%e4%ba%9b%e8%ae%b0%e5%bd%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]R不务正业之RCurl</title>
		<link>http://ieqi.net/2010/07/03/%e8%bd%acr%e4%b8%8d%e5%8a%a1%e6%ad%a3%e4%b8%9a%e4%b9%8brcurl/</link>
		<comments>http://ieqi.net/2010/07/03/%e8%bd%acr%e4%b8%8d%e5%8a%a1%e6%ad%a3%e4%b8%9a%e4%b9%8brcurl/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 11:48:09 +0000</pubDate>
		<dc:creator>G_will</dc:creator>
				<category><![CDATA[R]]></category>

		<guid isPermaLink="false">http://ieqi.com/?p=578</guid>
		<description><![CDATA[存档一下，仔细研究研究。 ========================================= 首先感谢COS论坛同意我在这篇水文中用RCurl做一些简单的演示，但由这些功能的延展而给COS论坛造成的任何损失或破坏，请各位自己负责。 一、RCurl是什么 混迹于各大社区，经常会看到关于浏览器之争的口水战：某某浏览器的市场份额如何如何，某某浏览器的速度如何如何，某某浏览器支持的功能多么强大等等。各个网友也根据自己的喜好，将自身归档于某某浏览器阵营，以此找些心灵的归属。估计类似的口水之争将永远的进行下去（是啊，不然闲着干什么呢？）。如果换个角度看这些争论，也正反应出浏览器在大家日常生活中的地位：想想每天坐在电脑前，用的最多的软件是什么呢？但是提到浏览器阵营中的cURL——一款杀人放火、居家旅游必备的命令行浏览器，则普及率要不少。可它的功能绝不逊色于我们日常用的各大浏览器。R的RCurl包是对cURL库—libcurl的封装。感谢Duncan Temple Lang等牛人的无私工作，我们才可以在R中运用cURL，将R和cURL这两大开源利器的优势完美的结合到一起。 二、用RCurl浏览网页 想想我们平时绝大部分时间是怎么用浏览器的？第一步：打开自己钟爱的那款浏览器；第二部：输入某个网址，如http://cos.name/；第三部：回车；第四步：拖拖鼠标，看自己想看的东西；第五步：点进某个链接，接着看。在关注呈现的信息的时候，大多数人都不大会去关心上述的5步（或者更多步）中浏览器（客户端）和网站（服务器端）是如何工作的。其实客户端和服务器端一直在保持联系：告诉对方想干什么，是否同意等等内容？比如我们浏览http://cos.name/时，浏览器给服务器端提交了如下的一些内容： GET /HTTP/1.1 Host:cos.name User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language:en-us Accept-Encoding:gzip,deflate Accept-Charset:GB2312,utf-8;q=0.7,*;q=0.7 Keep-Alive:300 Connection:keep-alive 通过上面的头信息，浏览器除了告诉COS服务器想浏览哪些内容，还告诉对方用了什么浏览器、想要什么样的数据格式、用什么协议/方法接收等非常细节的内容。COS服务器收到这些请求后，同样会提供一个物品清单： HTTP/1.x200 OK Date:Fri, 01 Jan 2010 13:11:20 GMT Server:Apache/2.2.14 (Unix) X-Powered-By: PHP/5.2.11 X-Pingback:http://cos.name/xmlrpc.php &#8230; <a href="http://ieqi.net/2010/07/03/%e8%bd%acr%e4%b8%8d%e5%8a%a1%e6%ad%a3%e4%b8%9a%e4%b9%8brcurl/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>存档一下，仔细研究研究。</p>
<p>=========================================</p>
<p>首先感谢COS论坛同意我在这篇水文中用RCurl做一些简单的演示，但由这些功能的延展而给COS论坛造成的任何损失或破坏，请各位自己负责。</p>
<p>一、RCurl是什么<br />
混迹于各大社区，经常会看到关于浏览器之争的口水战：某某浏览器的市场份额如何如何，某某浏览器的速度如何如何，某某浏览器支持的功能多么强大等等。各个网友也根据自己的喜好，将自身归档于某某浏览器阵营，以此找些心灵的归属。估计类似的口水之争将永远的进行下去（是啊，不然闲着干什么呢？）。如果换个角度看这些争论，也正反应出浏览器在大家日常生活中的地位：想想每天坐在电脑前，用的最多的软件是什么呢？但是提到浏览器阵营中的cURL——一款杀人放火、居家旅游必备的命令行浏览器，则普及率要不少。可它的功能绝不逊色于我们日常用的各大浏览器。R的RCurl包是对cURL库—libcurl的封装。感谢Duncan Temple Lang等牛人的无私工作，我们才可以在R中运用cURL，将R和cURL这两大开源利器的优势完美的结合到一起。</p>
<p>二、用RCurl浏览网页<br />
想想我们平时绝大部分时间是怎么用浏览器的？第一步：打开自己钟爱的那款浏览器；第二部：输入某个网址，如http://cos.name/；第三部：回车；第四步：拖拖鼠标，看自己想看的东西；第五步：点进某个链接，接着看。在关注呈现的信息的时候，大多数人都不大会去关心上述的5步（或者更多步）中浏览器（客户端）和网站（服务器端）是如何工作的。其实客户端和服务器端一直在保持联系：告诉对方想干什么，是否同意等等内容？比如我们浏览http://cos.name/时，浏览器给服务器端提交了如下的一些内容：<br />
GET /HTTP/1.1<br />
Host:cos.name<br />
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6)<br />
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<br />
Accept-Language:en-us<br />
Accept-Encoding:gzip,deflate<br />
Accept-Charset:GB2312,utf-8;q=0.7,*;q=0.7<br />
Keep-Alive:300<br />
Connection:keep-alive<br />
通过上面的头信息，浏览器除了告诉COS服务器想浏览哪些内容，还告诉对方用了什么浏览器、想要什么样的数据格式、用什么协议/方法接收等非常细节的内容。COS服务器收到这些请求后，同样会提供一个物品清单：<br />
HTTP/1.x200 OK<br />
Date:Fri, 01 Jan 2010 13:11:20 GMT<br />
Server:Apache/2.2.14 (Unix) X-Powered-By: PHP/5.2.11<br />
X-Pingback:http://cos.name/xmlrpc.php<br />
Vary:Accept-Encoding<br />
Content-Encoding:gzip<br />
Content-Length:13973<br />
Keep-Alive:timeout=10, max=30<br />
Connection:Keep-Alive<br />
Content-Type:text/html; charset=UTF-8<br />
通过这个清单，COS服务器告诉客户端：服务器是什么配置、你的协议我接受了、我给你的内容是什么格式等等信息。<br />
当用RCurl这款客户端时，我们需要一一配置提交给服务器的内容，所以不妨先随心所欲、照葫芦画瓢的模仿一下上面的头信息：<br />
myHttpheader&lt;- c(<br />
&quot;User-Agent&quot;=&quot;Mozilla/5.0(Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6)&quot;,<br />
&quot;Accept&quot;=&quot;text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&quot;,<br />
&quot;Accept-Language&quot;=&quot;en-us&quot;,<br />
&quot;Connection&quot;=&quot;keep-alive&quot;,<br />
&quot;Accept-Charset&quot;=&quot;GB2312,utf-8;q=0.7,*;q=0.7&quot;<br />
)<br />
然后可以运用getURL函数实现cURL的网页浏览：<br />
temp“html文件”中所包含的内容。<br />
如何看getURL的头信息呢？不妨再多设定几个RCurl的参数：</p>
<p>d =debugGatherer()<br />
temp&lt;- getURL(&quot;http://cos.name/&quot;,httpheader=myHttpheader,<br />
debugfunction=d$update,verbose= TRUE)<br />
此时d中包含了你所要的信息，其中：<br />
cat(d$value()[3])<br />
中为RCurl提交服务器的头信息，而<br />
cat(d$value()[2])<br />
中为服务器端返回的头信息。看看跟正常浏览器的交互内容是不是一样呢？怎么看一般浏览器的头信息呢？如果你用Firefox的话，用扩展Live http headers就可以了。</p>
<p>三、RCurl的Handles<br />
在RCurl的目前版本中，有170多个(!!!!!!!!!)cURL系统参数可以设置，具体可以用<br />
names(getCurlOptionsConstants())<br />
查看一下，各个参数的详细说明则可以参照libcurl的官方说明文档。<br />
如此众多参数，如果每次都设定，是不是会非常的繁琐？幸好在RCurl中有一个非常强大的功能可以有效的解决这个问题：那就是cRULhandles（当然，cRUL handles的优势不止这一个）。cRULhandles类似于行走江湖的一个百宝箱：根据自己的喜好设好后，每次背箱出发就行了。同时 cRULhandles还根据客户端、服务器端参数的设定在动态的变化，随时更新内容。如下便定义了一个最基本的cRULhandles：</p>
<p>cHandle&lt;- getCurlHandle(httpheader = myHttpheader)<br />
在getURL中可以如下应用：<br />
d =debugGatherer()<br />
temp &lt;- getURL(&quot;http://cos.name/&quot;, .opts = list(debugfunction=d$update,verbose = TRUE), curl=cHandle)<br />
此时，cHandle中的cRUL系统参数debugfunction、verbose均发生及时的更新。</p>
<p>四、用RCurl实现直接登录<br />
上面提及的getURL函数仅仅实现了页面浏览的最简单功能。如果想用RCurl登录到某个网站（如http://cos.name/bbs/）怎么实现呢？还是继续看看你在正常登录过程中，客户端提交给服务器端的信息吧，然后照葫芦画一个。</p>
<p>http://cos.name/bbs/login.php?</p>
<p>POST/bbs/login.php? HTTP/1.1<br />
Host:cos.name<br />
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6)Gecko/20091201 Firefox/3.5.6<br />
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8<br />
Accept-Language:en-us<br />
Accept-Encoding:gzip,deflate<br />
Accept-Charset:GB2312,utf-8;q=0.7,*;q=0.7<br />
Keep-Alive:300<br />
Connection:keep-alive<br />
Referer:http://cos.name/bbs/login.php<br />
Content-Type:application/x-www-form-urlencoded<br />
Content-Length:110<br />
forward=&amp;jumpurl=http%3A%2F%2Fcos.name%2Fbbs%2F&amp;step=2&amp;lgt=0&amp;pwuser=yourname&amp;pwpwd=yourpw&amp;hideid=0&amp;cktime=31536000<br />
这个头信息的核心就是客户端用POST方法给http://cos.name/bbs/login.php? 提交了一个字符串（即头信息最后的两行，其中包含了你的用户名和密码），请求服务器端给予身份认证。至于为什么提交那么稀奇古怪的一串字符，就要问谢老大了：）。<br />
如果要让RCurl提交相同的字符串，需要将上面的那段关键字符串转变成如下的格式：<br />
c(name1=”info1”,name2=”info2”,…)。字符串的处理工作交给R就行了：<br />
myPost&lt;- function(x){<br />
 post &lt;-scan(x,what=&quot;character&quot;,quiet=TRUE,sep=&quot;n&quot;)<br />
 abcd=strsplit(post,&quot;&amp;&quot;)[[1]]<br />
 abc=gsub(&quot;(^.*)(=)(.*$)&quot;,&quot;3&quot;,abcd)<br />
 abcnames=gsub(&quot;(^.*)(=)(.*$)&quot;,&quot;1&quot;,abcd)<br />
 names(abc)=abcnames<br />
 return(abc)<br />
}<br />
postinfo&lt;- myPost(&quot;clipboard&quot;)<br />
然后用RCurl中的postForm函数，将postinfo提交给服务器：<br />
temp&lt;- postForm(&quot;http://cos.name/bbs/login.php?&quot;,.params=postinfo,<br />
 .opts=list(cookiefile=&quot;&quot;),curl=cHandle,style=&quot;post&quot;)<br />
用<br />
cat(d$value()[2])<br />
查看一下cos.name给你的客户端反馈了那些内容？作为登录认证的cookies是不是已经在里面了？到这一步，RCurl已经成功的登录到http://cos.name/bbs/了，需要的一切认证信息都已经记录到百宝箱 cHandle中了。用<br />
getCurlInfo(cHandle)[[&quot;cookielist&quot;]]<br />
看看你想要的cookie是不是在那里了？接着用cHandle登录一下R子论坛吧，验证一下你是否真正的成功了？<br />
temp&lt;- getURL(&quot;http://cos.name/bbs/thread.php?fid=15&quot;,<br />
curl=cHandle,.encoding=&quot;gbk&quot;)<br />
五、用RCurl实现间接登录<br />
由于“这事儿不能说太细”，我们有时候不能用上面的方法来完成RCurl登录认证。那能不能让RCurl来使用其他浏览器客户端与服务器端已经建立好的认证呢？答案是可以尝试一下的：）所谓的认证信息一般就是服务器端在你的浏览器里面写下的cookies，把他们导出来交给RCurl，RCurl同样可以做好你需要的cURLhandle。<br />
先用你的常规浏览器（此处假定为Firefox）正常登录到http://cos.name/bbs/，然后再用Firefox的扩展Firecookie看看当前页面的cookie信息：你需要的就是它们了。将这些cookie信息导出成RCurl能够识别的格式，然后提交给RCurl就万事大吉了。</p>
<p>d2 =debugGatherer()<br />
cHandle2&lt;- getCurlHandle(httpheader=myHttpheader,followlocation=1,<br />
 debugfunction=d2$update,verbose=TRUE,<br />
 cookiefile=&quot;yourcookiefile.txt&quot;)<br />
接着去cos.name的R论坛看看：</p>
<p>temp&lt;- getURL(&quot;http://cos.name/bbs/thread.php?fid=15&quot;,<br />
curl=cHandle2,.encoding=&quot;gbk&quot;)<br />
验证一下temp里面是不是已经有你的大名了呢？<br />
grep(&quot;yourname&quot;,temp)<br />
如果有的话那么恭喜你：RCurl已经成功接管你的登录权限了。</p>
<p>六、登录后RCurl能继续干什么<br />
实现了登录认证的RCurl handles，这仅仅是第一步。能用它和R+RCurl继续做些什么呢？这时候，只要闭上眼睛、海阔天空的想一下平时怎么样用浏览器就有答案了：<br />
1、能不能让RCurl帮我数一下某VIP网络俱乐部中王小麻子灌了多少水？<br />
2、能不能帮顶一下王二麻子发表的美女yy贴？<br />
3、为了给我的外甥女选秀投票，点鼠标点的手都抬不起来了，能不能让RCurl来帮我做呢？<br />
4、我天天去某网站下载文档，绝对的体力活！<br />
5、半夜起来偷菜，太困了，交给RCurl做就好了。<br />
6、用RCurl玩twitter、写博客就好了。<br />
7、我就想用RCurl看门户网站的体育新闻。<br />
8、我就想在各个网站的论坛上发个“顶”字，顺便留下我的牛皮膏药小广告。<br />
9、……<br />
天有多高，RCurl有多强……</p>
<p>七、结束语<br />
没有想到会唠叨这么多的废话。但这篇水文仅涉及到libcurl、RCurl中的一点皮毛而已，更多的内容请参考DuncanTemple Lang写的RCurl帮助文档和libcurl官网。客观讲cURL属于浏览器中的一把剪刀，由于它强大的易编程属性，RCurl会带来一些意想不到的破坏性。但要记住：技术本身可能是无罪的，任何的破坏都可能是我们自己造成的。网络中的ID是现实中你的一个延伸，她同样有完整的人格和生命力，所以请尊重和爱护网络中的自己。<br />
最后，希望这篇水文没有影响到你的好心情。</p>
]]></content:encoded>
			<wfw:commentRss>http://ieqi.net/2010/07/03/%e8%bd%acr%e4%b8%8d%e5%8a%a1%e6%ad%a3%e4%b8%9a%e4%b9%8brcurl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

