向求助大神这是什么歌7R语言大神求助大神这是什么歌7

R语言中一些有意思的细节问题 - 推酷
R语言中一些有意思的细节问题
又是很久很久没更博客了,一直想写一些有点营养的东西,无奈水平有限力不从心,今天逛论坛的时候突然觉得R版里的求助帖往往是一些具有普遍性的问题,而且有些细节甚至还比较重要,之前学R的时候就好几次碰到一些很简单的问题,但就是想不起来该怎么操作。综上所述,我就象征性的精选了几个相对比较有意思的问题,一方面作为笔记万一哪天忘记了方便查,另一方面与大家分享也算是积德行善。废话到此为止,切入正题~
1 取整运算
在编程实现的时候有时会碰到对数值取整的需求,而取整的方式却多种多样,依赖于具体问题,不过在R中已经配备了种类齐全的相关函数,主要包括以下五种:
floor():向下取整;
ceiling(): 向上取整;
round(): 四舍五入取整;
turnc(): 向0取整;
signif(): 保留给定位数的精度。
关于浮点数的问题几乎在每一本关于数值分析的书中都会在第一章中提及,而因为浮点数导致的计算精度问题也几乎在各式各样的数学和统计软件中碰到,不妨看一个比较简单的例子
& sum(c(2,1.2,-0.8,-2.4,3,1.2,3.1,-1.5,-4.4,-1.4)) [1] -2.
如果你有强迫症,或许下面的命令可以拯救你(所谓强制转换为整数,当然也可以采用问题1中所提及的方法)
as.integer(sum(c(2,1.2,-0.8,-2.4,3,1.2,3.1,-1.5,-4.4,-1.4)))
&3 数据框合并
数据框的整合是R中处理数据时的家常便饭,面对这类问题,一般来说最佳选择必然是Hadley的dplyr包,玩转数据框必备且实属精品,当然除此之外,R base本身自带的merge()也可以起到类似的效果,关于merge的使用,除了R中的帮助文档外,还可以stackoverflow上的
。至于dplyr, 不妨用一个例子来说明问题
library(dplyr);
set.seed(100);
df1&-data_frame(Num=rep(1:3,each=3),value=rnorm(9));
df2&-data_frame(Num=1:3,date=c(&12-25&,&07-01&,&09-10&));
inner_join(df1,df2,by=&Num&);
4 关于赋值
不同于MATLAB, R中的赋值符号除了传统的&=&外,还有&&-&以及&-&&,出于对某种赋值方式的偏好,也逐渐出现了等号党和箭头党,但到底孰好孰坏,显然争不出任何结果,相对来说更重要的倒是了解这两者的区别。在大部分情况下,两者等价,但是需要注意以下区别:
(1) 等号只能单向赋值,例如x = 10; 箭头符号可以双向赋值,即x&-10与10-&x等价
(2) 在函数中赋值(参数传递)只能使用&=&, 尽管使用&&-&也不会报错,在R会忽略指定的赋值对象,转而赋值给默认顺序中该位置的参数,例如构造矩阵中,
& matrix(1:6,ncol&-3) [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 & matrix(1:6,ncol=3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
事实上第一条命令等价于 matrix(1:6,3) , 因为在默认的参数排序中nrow排在ncol之前,从而将数字3赋值给了nrow.
(3)除函数内参数赋值外,能用&=&等地方一定能用&&-&,但反过来则不一定,譬如
system.time(A&-matrix(1:6,3))不能替换为等号。
当然除了上述两种赋值方式外,还有一种赋值方式&&&-&也偶尔在R编程运用到,表示给上一层环境中的变量赋值(注意并不是全局赋值,具体可以参考这个
5 工作目录
由于涉及到读取和存储数据等问题,工作目录有时候也是一个会被关心的问题,但真正会涉及到的无非就是工作目录的获取和修改,分别对应如下两个函数
getwd():理论上可以不用在括号里加任何东西
setwd():若需要重新设置工作目录,只需在括号中添加新的路径即可
6 概率分布
关于这一点,CRAN上有一个专门针对这个话题的Task View,所以也就无需多言了,直接附上链接
7 字符大小写转换
tolower() #全部转为小写
toupper() #全部转为大写
8 查看上一步的运算结果
类似于MATLAB中的ans, R中也有类似于可以查看上一步运行结果的变量&.Last.value,值得一提的时,由于前面多了一个点,因此这是一个隐藏变量,所以在 ls()中是查不到的。
& 1+1 [1] 2 & .Last.value [1] 2
9 更改相关的默认设置
相应的默认设置譬如语言、工作目录、需自动加载的包等都可在R安装目录下的etc文件中修改。
10 特殊符号
NA: 缺失数据
NaN: 无意义的数
Inf: 正无穷大
-Inf: 负无穷大
利用快捷键往往可以省去很多点鼠标的功夫或是加快码代码的速度,譬如Tab可以实现自动补全,Alt+&-&可以直接输出&&-& (Rstudio) 以及Ctrl+R 运行当前代码等等。
本文素材大多取自于人大经济论坛R语言专版,在此表示感谢,由于大多凭记忆整理,所以大多数主题已记不清原始链接非常抱歉,此外本文也会继续参考有意思的求助帖持续更新。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致用C语言做公交车查询系统,求大神们帮忙解答一下 - 开源中国社区
当前访客身份:游客 [
当前位置:
利用数据结构的知识,用C语言来实现,做一个公交车的查询系统,要求至少有一次换乘,做一个这样的系统需要用到数据结构的那些知识?又该如何去做(也就是该从哪方面开始入手,思路等等)
共有9个答案
<span class="a_vote_num" id="a_vote_num_
我先应该是图吧
--- 共有 2 条评论 ---
不可以 (PS:我不会哇)
(4年前)&nbsp&
可以具体说一下如何去做吗?
(4年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
先用数据把数据规整。别用c,用c掉数据库的借口,中间可以考虑用脚本语言实现。数据结构方面c的工作只是围绕查询算法展开。查询算法用图是逃不掉的。但图的基础代码,建议使用外面标准的。结构越简单越到,否则你数据规模上了后错都不知道怎么错的。
原则上,先做原型。原型的方法还是上面,能用数据库的操作就尽可能用,原因就是一个,数据库的操作逻辑正确性有保障。
后续的事情再说。如果1000个站点,5个同时并发查询,用原型,在一般的台式机上,超过15秒后,再开始进行优化。
--- 共有 6 条评论 ---
: 对。。。会做吗?
(4年前)&nbsp&
啥啥???
(4年前)&nbsp&
带权值的有向图的最短路径?
(4年前)&nbsp&
: 对啊。。。觉得很复杂
(4年前)&nbsp&
人家是做作业而已~野鬼都当成商业项目了~
(4年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
是不是有N个地点,M个公交车,并且指明了M个公交车的运输区间,求N1到N2的公交方案。
--- 共有 1 条评论 ---
(4年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
这貌似典型的图算法
<span class="a_vote_num" id="a_vote_num_
好的数据结构+二分查找 ,完全可以不用树来实现, 我用C语言在Windows Sdk下做过,1500行就可以了。下面是我设计的数据结构
http://user./#!app=2&via=QZ.HashRefresh&pos=
http://www.oschina.net/question/07
/** *The STOPINFO struct contains the all stops that in the file. *For one of this variabl, it contains the current stop's name. *Most stops belong to more than one line. So, it would be better to note evey& *line's name which contain current stop. *Also, we would know the current stops's position indexs int its lines, so, use LineIndex[70]. *The total of line that conatin the current stop also would be know.& */ typedef struct tag_STOPINFO { & & & &TCHAR StopName[32]; & &//current stop name & & & &TCHAR WhichLineName[64][32]; & &//LineName & & & &int WhichLineIndex[64]; & &//the same stop in different line's index & & & &int LineC & &//the sum line that contain the stop }STOPINFO; /////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
/** *The LINEINFO struct contain the all lines that in the file. *For one of this variable, it contains the current line's name. *We should know the current line is a up, down or circle route, so use LineDirection. *Each line contains more than one stop, and use SumStop to count them. *As every line has more than one stop, so, it is important to write down the all stops, *So, we define a new nameless struct to note the stops' information, and it contains evry stop's name *and the index this stop int current line. */ typedef &struct tag_LINEINFO { int LineD //some lines' name are same, but the up stops and down stops are not all the same, use up or down to note them& TCHAR LineName[30]; //current line name int SumS //sum stops does this line have struct & { & &TCHAR & &StopName[32]; //the sum stops' name does this line have, and the max is 173& & &int & & StopI //the stop's index which in current line }StopInfo[256];
}LINEINFO; /////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
/** *For once transferation, we should know where could be transfor other lines. *So it is important to note the first line name, and also must know the second line name. *Ofcourse, the transfor stop name must be know */ typedef struct &tag_TRANSFERONCE { & & &TCHAR StopName[32]; //the stop's name & & &int StopI //the stop's index & & &int ToLineI //the line's index where will go & & &int FromLineI & & & &//the line's index where come & & &int TotalS //the sum of stops that this contain in this tranfer line }TRANSFERONCE;
/////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// /** & & *As for twice transfer, it include two stops and three lines. & & *These information is a twice transfer line. & & *Without write the lines' or the stops' name, we juest note their index int LineIno and StopInfo */ typedef &struct &tag_TRANSFERTWICE { & & & &int & FirstStopI //first tranfer stop's inedex & & & &int & SecondStopI //second transfer stop's index & & & &int & FirstLineI //first lines's index & & & &int &&SecondLineI //second lines's index & & & &int & ThirdLineI //third lines's index & & & &int & TotalS //the sum of stops that this contain in this tranfer line }TRANSFERTWICE; /////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
/** & & *Information of file, include LINENUMBER, LINENAME, STOPNO, STOPNAME, LINEINDEX, DIRECTION */ typedef struct tag_FILEINFO { & & int & &LineID; & & int & &StopID; & & int & &LineStopI & & int & &LineD & & TCHAR StopName[32]; & & TCHAR LineName[32]; }FILEINFO; /////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
<span class="a_vote_num" id="a_vote_num_
这是程序运行的截图,要转换成控制台下也很容易
--- 共有 1 条评论 ---
能用C语言做一个吗?因为到时还要写报告
(4年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
呵呵,直接调用百度或其它公司提供公交API,不就行了吗?
<span class="a_vote_num" id="a_vote_num_
人家还是个学生,明显的基于C语言数据结构和算法的简单问题,怎么楼上的都弄的那么高级……
--- 共有 3 条评论 ---
: 谢啦。。。明白啦
(4年前)&nbsp&
: 大概思路就是……你学过图了吧,有个最短路径算法,先把最短路求出来,然后找出哪些公交车经过这个最短路,求出最少倒车次数的那几个公交车。
(4年前)&nbsp&
会做这个系统吗?
(4年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
建议用汇编写,提高程序的运行效率
--- 共有 1 条评论 ---
(4年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
枫叶_小伟的其它问题
类似的话题请教大神这是什么?r谢谢_百度知道

我要回帖

更多关于 求助大神这是什么歌6 的文章

 

随机推荐