搜索
查看: 5909|回复: 12

[R] R黑魔法合集

[复制链接]

634

主题

1182

帖子

4030

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4030
发表于 2017-6-3 08:29:44 | 显示全部楼层 |阅读模式
统计了近期的近百份咨询email,发现R里面的黑魔法被提及的频率非常高。
特意开辟这个黑魔法合集。
我抛砖引玉吧。
首先是在R里面把变量write.table之后竟然不一定能read.table,尤其需要注意一些参数:,quote = F,row.names =F
http://www.biotrainee.com/thread-1042-1-1.html

然后是:缺失一些元素的矩阵读取报错,需要在read.table里面加上fill=TRUE
http://www.biotrainee.com/thread-703-1-1.html

还有,读取带引号的文件,比如某一些KEGG通路名字里面有引号,其余的却没有。
最后,文件读取进来R里面经常就变成factor了,需要加上参数避免这一件事。

最后,所有的错误,都可以通过调试来找到的,希望你们多折腾
http://www.biotrainee.com/thread-778-1-1.html
还有很多黑魔法我已经忘记了,希望朋友们留言补充
代码调试技巧- 针对R语言





上一篇:RNA-seq 检测变异之 GATK 最佳实践流程
下一篇:代码调试技巧- 针对R语言
你这个问题很复杂,需要打赏,请点击 http://www.bio-info-trainee.com/donate 进行打赏,谢谢
回复

使用道具 举报

2

主题

17

帖子

323

积分

版主

Rank: 7Rank: 7Rank: 7

积分
323
发表于 2017-6-3 10:34:53 | 显示全部楼层
用pheatmap画图热图的时候不需要前面加png或pdf这类的函数创建画板,在pheatmap里面本身就有了,只需要直接在pheatmap里面定义出图的格式就能直接有了。不然就会多出一张白图。
回复 支持 1 反对 0

使用道具 举报

1

主题

9

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2017-6-5 09:59:35 | 显示全部楼层
说到R magic当然不得不提在Jupyter notobook中使用的Rmagic了,可以在Python notebook中直接运行R代码,还可以把结果返回到Python 对象中进行操作。

Rmagic in Ipython
在Ipython中使用R
回复 支持 1 反对 0

使用道具 举报

1

主题

7

帖子

41

积分

版主

Rank: 7Rank: 7Rank: 7

积分
41
发表于 2017-6-3 09:50:23 | 显示全部楼层
条件语句中检查变量是否为某值的要用
> if(identical(变量, 某值)) {...}
为什么不用下面呢?
> if(变量 == 某值) {...}
因为当你变量在一些操作中被一旦不慎被赋了character(0),第二种操作会导致如下错误:
> Error in if (x == 0) { : argument is of length zero
回复 支持 反对

使用道具 举报

1

主题

7

帖子

41

积分

版主

Rank: 7Rank: 7Rank: 7

积分
41
发表于 2017-6-3 10:04:38 | 显示全部楼层
在一个大loop中每次都call函数,如果在某次迭代中出现报错,会非常DT(比如跑logistic regression出现无法converge的情况)。
那么我们怎么样让大循环不被某次迭代的函数error打断呢?
你可以在循环中不直接call function,而用try去call。
例如:
for (i in 1:10000) {
   model <- try(lm(...), silent = T)
   if (class(model) != 'try-error') {.... #函数没有报错的操作} else {... #函数报错的操作}
   }
回复 支持 反对

使用道具 举报

2

主题

17

帖子

323

积分

版主

Rank: 7Rank: 7Rank: 7

积分
323
发表于 2017-6-3 10:53:13 | 显示全部楼层
本帖最后由 秋叶麒麟 于 2018-8-21 10:17 编辑

read.table读取不规则文件使用fill=T的时候,会根据前5行判断文件列数。如果5行后还有更长的行,超过前5行中最长行的部分元素会被强行放到下一行。
解决办法:
添加参数col.names   ,建立足够多个的col.names之后,再读取就正常了。


示例如下:
test <- read.table("../Desktop/test1.txt", sep="\t", header = FALSE, fill = TRUE)
dim(test)
    11  39
上面那个就是这种情况,导致数据行数比实际增加1行,修改后如下
test <- <- read.table("..("../Desktop/op/test1.txt", s", sep="\t", header = FALSE, fill = TRUE, E, col.names = s = LETTERS[1:41])
dim(test)
   10  41

记住:保证col.names的个数大于等于文件中最长行的元素个数
回复 支持 反对

使用道具 举报

1

主题

7

帖子

41

积分

版主

Rank: 7Rank: 7Rank: 7

积分
41
发表于 2017-6-3 11:04:10 | 显示全部楼层
秋叶麒麟 发表于 2017-6-3 10:53
rea.table读取文件的时候,表格中有其他字符时,有些数字在矩阵中不是num格式,无法进行计算。
我找到了个 ...

这个你试下在脚本里面加上
> options(stringsAsFactors = F)
回复 支持 反对

使用道具 举报

2

主题

17

帖子

323

积分

版主

Rank: 7Rank: 7Rank: 7

积分
323
发表于 2017-6-3 11:18:28 | 显示全部楼层
本帖最后由 秋叶麒麟 于 2017-6-3 11:21 编辑
檀香沙 发表于 2017-6-3 11:04
这个你试下在脚本里面加上
> options(stringsAsFactors = F)

加了,但有时候还是会碰到这种问题.str(test[2,2])结果还是chr  需要再加上as.numeric.
回复 支持 反对

使用道具 举报

29

主题

131

帖子

1208

积分

金牌会员

Rank: 6Rank: 6

积分
1208
发表于 2017-6-4 01:50:24 | 显示全部楼层
如果用R作图时想将多张图放在一张画布上,一般会想到用par(),但是这个只能用于基础作图方法
但是如果的图片是用ggplot2或者其他R包的话,par()函数则无效的(一般来说是这样的)。
这时就可以考虑用下grid包的grid.layout函数,代码如下,可以将两个ggplot2图横向并排

[AppleScript] 纯文本查看 复制代码
pa <- ggplot(data, aes(x = data$A))+
        geom_density(fill = "blue", colour = NA, alpha = 0.2)+
        geom_line(stat = "density", adjust = 0.5)
pb <- ggplot(data, aes(x = data$B))+
        geom_density(fill = "blue", colour = NA, alpha = 0.2)+
        geom_line(stat = "density", adjust = 0.5)

grid.newpage()
pushViewport(viewport(layout = grid.layout(1,2)))
vplayout = function(x,y)viewport(layout.pos.row = x,layout.pos.col = y)
print(pa,vp = vplayout(1,1))
print(pb,vp = vplayout(1,2))
回复 支持 反对

使用道具 举报

11

主题

34

帖子

332

积分

版主

Rank: 7Rank: 7Rank: 7

积分
332
发表于 2017-6-5 09:23:36 | 显示全部楼层
R读入数据时表头被添加X,check.names搞定
read.csv("filename.csv",check.names=FALSE)
欢迎访问 my blog : Hope, Bioinformation
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-7-18 09:34 , Processed in 0.075214 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.