Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使R中数据表中未显示的长数字成为科学模式?_R_Data.table - Fatal编程技术网

如何使R中数据表中未显示的长数字成为科学模式?

如何使R中数据表中未显示的长数字成为科学模式?,r,data.table,R,Data.table,我在一个文件夹中有几个.csv文件。我想用命令把它们全部读一遍 library(data.table) path <-path list <- list.files(path,pattern="*.csv") files <- paste(path,list,sep='/') DT <- do.call(rbind, lapply(files, fread)) options("scipen"=100, "digits"=12) options(scipen=999

我在一个文件夹中有几个.csv文件。我想用命令把它们全部读一遍

library(data.table)
path <-path
list <-  list.files(path,pattern="*.csv")
files <- paste(path,list,sep='/')
DT <- do.call(rbind, lapply(files, fread))
options("scipen"=100, "digits"=12)
options(scipen=999)
我应该如何将所有的科学数字转换成正规整数

非常感谢

第一次编辑: 在我使用命令之后

library(data.table)
path <-path
list <-  list.files(path,pattern="*.csv")
files <- paste(path,list,sep='/')
DT <- do.call(rbind, lapply(files, fread))
options("scipen"=100, "digits"=12)
options(scipen=999)
它仍然显示数字,如

5.43971221673e-313
甚至在我应用命令之后

library(data.table)
path <-path
list <-  list.files(path,pattern="*.csv")
files <- paste(path,list,sep='/')
DT <- do.call(rbind, lapply(files, fread))
options("scipen"=100, "digits"=12)
options(scipen=999)
它把号码还给我了

0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000543971221673
即使543971221673不是正确的数字,也应该是正确的

110101001001
我使用data.frame尝试转换,它可以工作

a <- read.csv(files)
a[,1] <- as.character(a[,1])
但我更喜欢使用data.table来加快速度


谢谢你们

通过此处的引用,至少暂时解决了此问题

options(scipen = 999)
data.table(a = c(1e15, 2e15))
#                   a
# 1: 1000000000000000
# 2: 2000000000000000

options(scipen = 4)
data.table(a = c(1e15, 2e15))
#        a
# 1: 1e+15
# 2: 2e+15
'fread自动检测大于2^31的大整数,并从bit64包中将其作为integer64类型读取。'

只是需要

install.packages("bit64")
或者说

options(datatable.integer64="character")
在data.table之前,它就工作了。例如:

library(data.table)
path <-path
list <-  list.files(path,pattern="*.csv")
files <- paste(path,list,sep='/')
options(datatable.integer64="character")
DT <- rbindlist(lapply(files, fread))

感谢@Sathish这是我第一次在这里问R问题

请使用rbindlistlapplyfiles,fread。做。打电话通知。。。太慢了。@MattDowle当你读到这个数字fread'110101001001时,为什么值会改变\n我在这里得到了答案。通过执行选项DataTable.integer64=character@Sathish@YijiaoLiu请将您尝试的内容和输出分别发布一个演示answer@Sathish谢谢!嗨,谢谢,但是,它显示0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000543971221678;543971221678不是正确的数字,在出现长字符串时应为1101010010022,因为您关闭了科学符号。若要将其更改回默认值,请使用scipen=0。根据问题中的数据,该值是正确的,即5.439721673E-313@YijiaoLiu是的,您是对的。您使用的是data.table的哪个版本?我怀疑它比包含新闻项的v1.10.2版本要小:当存在fread或print see integer64列时,为了方便起见,bit64的命名空间现在会自动加载。@MattDowlei正在使用data.table的1.10.4,R版本是3.3.2.Ok。出现警告消息要求您安装bit64软件包了吗?建议不要设置optionsdatatable.integer64=字符,除非您确实希望这样的数字作为字符。请删除该选项,检查您是否看到未安装bit64软件包的警告,然后安装bit64并重试。我刚刚发现,如果您未安装bit64,则预期的警告不会发生,因为该部分代码中存在错误。我刚把它修好。对此很抱歉。@MattDowleHi Matt这些天我忙于数据清理工作,我尝试了一下包bit64,但没有完全完成,非常感谢,因为我现在正在用这个数据集完成我的论文。