今天是生信星球陪你的第416天
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
问题
我在讲R语言基础课程时,放了一道练习题,让学员生成如下数据框:
我给出的答案是:
df <- data.frame(gene=paste0("gene",1:15),s1=rnorm(15),s2=rnorm(15),s3=rnorm(15))
tips:rnom是一个生成随机数的函数,括号里的15代表生成随机数的数量是15个。
遇到了一位学员提了个问题:后三列的列名有规律,内容也都是随机数,如果有需求生成10列、100列,有没有其他方法快捷生成?
方法一:利用矩阵
我想到的第一种方法时用矩阵生成,然后转换为数据框。
因为矩阵就是在向量的基础上增加了行和列的属性
,如下:
df2=matrix(rnorm(45),ncol = 3)
df2=data.frame(df2)
df2=cbind(gene=paste0("gene",1:15),df2)
df2
思路非常简单:先生成45个随机数,然后将他们排列为三列,同样的道理,要生存10列那就是10×15个随机数,排列为10列。
方法二:利用for循环和列表
这个思路就相对难一点:
1.先赋值一个空数据,只定义他的数据结构是列表。
2.然后用for循环进行批量赋值,将这些值储存在列表里,成为列表的元素。元素名是s1,s2。。。s10。
3.用as.data.frame将列表转换为数据框。
test=list()
#定义行数。n等于几,就会生成几列。
n=10
for(i in 1:n){
test[[i]] }
df3 = as.data.frame(test)
colnames(df3) "s",1:n)
df3=cbind(gene=paste0("gene",1:15),df3)
df3
将这些代码复制到Rstudio即可直接运行。
补充:现在查看左边的变量窗口
i的值是10L,代表的是整数10,这里的L是为了强调,区分数值型数据的两个分支,即整型和双精度型,之所以是是10,是因为for循环多次运行了大括号内的代码,最后一轮i的值是10。
向大家隆重推荐隔壁生信技能树的一系列干货!
全球公益巡讲、招学徒
B站公益74小时生信工程师教学视频合辑
?
初学生信,很荣幸带你迈出第一步。
我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~