R is not underscore friendly
- Create Time: 2022-03-03
- Update Time: 2022-03-08
下划线不友好?
这是这两天Edwin问我的一个问题,我认为很简单,就直接给了答案,但是结果却和预期的不太一样。
Hi Logan! May I ask about how to prevent the R converting my duplicated column names into something like A.1 A.2 while original column names are A A
我的第一反应就是这个问题我之前见过,我会。
然后我就回了,就是读取数据的时候,比如用read.table
,里面有一个参数叫check.names
,把它设成FALSE
就可以了(check.names=FALSE
)。
过了一会,Edwin回我,还是不行,然后我就拿了他的数据来自己实验,发现,真的不行!!!不过这个命令我前几天刚用了,我很确定可以的。
从题目中也能看出来最后找出来的原因是什么,但是这个真的花了我一天的时间做测试才发现。
结果上网查了,自己那数据试了接近一天,终于最后搞清楚了,原来因为名字中有_
(下划线),如果没有下划线就是OK的。并不是,不要记住这个答案,这个答案是错误的。
我以为我获得了正确答案,就是以后在R里面,名字最好不要有下划线,直到我准备写这份记录的时候才发现,原来是可以有下划线,但是你查看数据的时候需要注意。
df<-read.table(text='A,d_,d_,A_1,A_1\n0,b,6,5,5\n2,5,6,5,6',header=T,check.names=FALSE,row.names=1,sep=',')
df
可以看出,结果名字中有下划线,仍旧可以出现相同的列名。但是如果我们换一种方式查看,就不同了。
df[0:2,0:2]
也就是只有在这种查看方式下,才会出现这样即便加了参数check.names=FALSE
,还是有后缀的原因,这个可能只是R为了让我们查看的时候更方便而做的设定。
后记
看来做一些整理还是很有必要的,至少这个问题在做测试的时候感觉好像找到的答案,但是在整理过程中,想要重复的时候,发现和自己的预期不太一样,再试了一下,就发现原来自己理解错了。
然后如果是在jupyter notebook
里面遇见这种情况,那应该是IRKernel
包装导致。我猜想可能是显示的时候,IRKernel
会利用df[0:11,0:11]
这种形式来提取数据,才会导致这样的结果。