我遇到一种我不理解的奇怪行为。这是一个例子:
plouf <- read.table(text = "id ttt_course generic_name
1011010001.1 1 etanercept
1011010001.2 1 etanercept
1011010001.3 1 etanercept
1011010001.4 1 etanercept
1011010001.5 1 etanercept
1011010001.6 1 etanercept
1011010001.7 1 etanercept
",header = T)
id列是奇怪的。
> class(plouf$id)
[1] "numeric"
所以它是数字,但是当我显示它时:
id ttt_course generic_name
1 1011010001 1 etanercept
2 1011010001 1 etanercept
3 1011010001 1 etanercept
4 1011010001 1 etanercept
5 1011010002 1 etanercept
6 1011010002 1 etanercept
7 1011010002 1 etanercept
它显示它的舍入值。它的水平也很奇怪:
> unique(plouf$id)
[1] 1011010001 1011010001 1011010001 1011010001 1011010002 1011010002 1011010002
我当然可以强行打印:
> formatC(plouf$id,format="f",digits=1)
[1] "1011010001.1" "1011010001.2" "1011010001.3" "1011010001.4" "1011010001.5" "1011010001.6" "1011010001.7"
这种行为的原因是什么?我怎么能避免呢?
查看数据框打印方法的文档:
?print.dataframe
## S3 method for class 'data.frame'
print(x, ..., digits = NULL,
quote = FALSE, right = TRUE, row.names = TRUE)
当您输入plouf
时,因为它是一个数据框,所以这是将数据框打印到控制台的方法,其中digits = NULL。
它有三种方式:
options(digits = 14)
就个人而言,我尽量避免设置不同的选项,因为如果您看到非标准输出,则会更难与他人协作。
您可以将digits
选项设置为大于10的值:
> options(digits=14)
> plouf
id ttt_course generic_name
1 1011010001.1 1 etanercept
2 1011010001.2 1 etanercept
3 1011010001.3 1 etanercept
4 1011010001.4 1 etanercept
5 1011010001.5 1 etanercept
6 1011010001.6 1 etanercept
7 1011010001.7 1 etanercept
希望这可以帮助。
如果您不想更改options
设置,而只是打印带有小数位的数据框,正如Dan Hall建议的那样,print
函数具有正确的位数:
print(plouf, digits = 11)
输出:
id ttt_course generic_name
1 1011010001.1 1 etanercept
2 1011010001.2 1 etanercept
3 1011010001.3 1 etanercept
4 1011010001.4 1 etanercept
5 1011010001.5 1 etanercept
6 1011010001.6 1 etanercept
7 1011010001.7 1 etanercept