前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R data.frame 提取的怪事,希望你没中招

R data.frame 提取的怪事,希望你没中招

作者头像
生信宝典
发布2023-10-31 15:18:26
1360
发布2023-10-31 15:18:26
举报
文章被收录于专栏:生信宝典生信宝典

这几天, 讨论群频繁反应关于 DEseq2 分析的报错:arguments imply differing number of rrows。这个代码经过了很多次培训的测试,按说不应该有问题,就远程连接调试了下,发现问题出在最近刚改的数据框索引上了。这个常见问题之前总会考虑着,这次修改时被忽略了,写推文记录下。

我们常用[ , ]提取数据框 (data.frame):

  1. 如果是多列数据框,提取后还是数据框;
  2. 如果是单列数据库,提取后就被自动转成了vector,想再按照数据库的方式使用就会报错;
  3. 提取时加上drop=F 就可以避免这个问题。

举例如下:

代码语言:javascript
复制
text <- "Sample\tGroup
trt_1\ttrt
trt_2\ttrt
trt_3\ttrt
untrt_1\tuntrt
untrt_2\tuntrt
untrt_3\tuntrt
"

#  读入文件,存储为数据框
df <- read.table(text=text, sep = "\t", row.names=1, header=T)

# 查看数据框结果

df

#         Group
# trt_1     trt
# trt_2     trt
# trt_3     trt
# untrt_1 untrt
# untrt_2 untrt
# untrt_3 untrt

操作下列提取,提取第一列(当然只有一列)

代码语言:javascript
复制
a1 = df[, 1]
a1
# 提取后变成 vector 了
# [1] "trt"   "trt"   "trt"   "untrt" "untrt" "untrt"

#  希望提取行名时,给出了 NULL
rownames(a1)

# NULL

通常我们希望提取后,数据框还是数据框,下游操作行为一致 (增加drop=F参数)。

代码语言:javascript
复制
a2 = df[,1,drop=F]

#  增加drop=F后,提取后还是保持数据库的格式
a2

#         Group
# trt_1     trt
# trt_2     trt
# trt_3     trt
# untrt_1 untrt
# untrt_2 untrt
# untrt_3 untrt

# 提取行名也正常了
rownames(a2)

# [1] "trt_1"   "trt_2"   "trt_3"   "untrt_1" "untrt_2" "untrt_3"

建议data.frame 的操作始终加参数drop=F

题图来自:https://pixabay.com/photos/dementia-alzheimer-s-dependent-3051832/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信宝典 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档