一、data.table读取大数据
用fread读取大数据集
循环运行时会出现i,j索引找不到对象的问题(我是设置了两个for循环,遍历每一个单元格,虽然很低级……),具体报错如下
Error in `[.data.table`(x, i, j) :
j (the 2nd argument inside [...]) is a single symbol but column name 'j' is not found. Perhaps you intended DT[, ..j]. This difference to data.frame is deliberate and explained in FAQ 1.1.
搜索解决方法时,找到一篇文章fread~对于循环索引的影响 - 简书 (jianshu.com)
- 里面提到用read.table不会报错,运行了一下确实如此,就是速度也会慢很多。
- 列的索引时,可用下面方法
x <- colnames(data)
for(i in 1:ncol(data)){
data[1,get(x[i])] <- ......
但是,我在用这种方法时也有点问题。报错如下
Error in get(x[j]) : object 'R01' not found
我单独列出这个数据时就不会有问题,只有遍历时会出现,所以我还是用了read.table读取数据。。。害……
二、R语言版本问题
我的Rstudio上R版本是4.0,但服务器上R语言版本是3.x,所以如果在本机Rstudio上进行代码实验,直接搬到服务器运行大数据还是会出现一些错误。
- 在服务器版本上试图用conda安装一个4.x版本的R语言环境,但下载的包中缺失了一个什么icudt的包,Linux-安装stringr时报错,这篇文章也提到了,就是在安装stringr时要先装依赖包stringi等等问题。。但这个最终也不知道是什么问题呜呜,目前还没想到办法,所以退而求其次在服务器上用3.5版本的R实验
- 分两步同时进行
准备一个大数据的一小部分数据进行实验
##输入R,用小数据进行实验
> R
> ……
如果能够成功运行就转到外面或者重新开一个窗口写一个大数据的Rscript
##在命令行输入
vi xxx.R
进去之后,在文本第一行输入
#! /usr/bin/env Rscript
然后后面正常写要运行的R语言命令
写完之后Rscript运行
- 由于是大数据,不可能一直挂着让他运行,需要后台运行
#一种是直接在命令的最后加一个&,但退出终端后,他也断了
Rscript xxx.R &
#还可以用nohup命令
nohup Rscript xxx.R>/dev/null 2>&1 &
#或者是
nohup Rscript xxx.R >nohup.out 2>&1 &
需要注意的是,在用nohup命令后,需要在命令行输入exit登出系统,不能直接按“×”退出终端
三、stringr包的str_detect函数的一个细节
这个函数其实不是精确匹配字符串的函数,比如我想在raw_data里找到一个包含“956”的数据,它不仅会找到“956”的数据,还会输出“1956”的数据。
也就是说str_detect是寻找完全或非完全匹配的字符串的,所以如果只想要完全匹配的数据,可以采用match函数!
网友评论