我经常发现自己的文件每行有一个数字.我最终在excel中导入它来查看中位数,标准差等内容.
在linux中是否有一个命令行实用程序来做同样的事情?我通常需要找到平均值,中位数,最小值,最大值和标准偏差.
我想将一个大数据表流式传输到R LINE BY LINE,如果当前行具有特定条件(假设第一列> 15),则将该行添加到内存中的数据帧.我写了以下代码:
count<-1;
Mydata<-NULL;
fin <- FALSE;
while (!fin){
if (count==1){
Myrow=read.delim(pipe('cat /dev/stdin'), header=F,sep="\t",nrows=1);
Mydata<-rbind(Mydata,Myrow);
count<-count+1;
}
else {
count<-count+1;
Myrow=read.delim(pipe('cat /dev/stdin'), header=F,sep="\t",nrows=1);
if (Myrow!=""){
if (MyCONDITION){
Mydata<-rbind(Mydata,Myrow);
}
}
else
{fin<-TRUE}
}
}
print(Mydata);
Run Code Online (Sandbox Code Playgroud)
但我收到错误"数据不可用".请注意我的数据很大,我不想一次性阅读并应用我的条件(在这种情况下很容易).
我看到当一个文件名作为参数时,如何让Rscript执行我想要的操作,例如,如果我的Rscript被调用script并且包含:
#!/usr/bin/Rscript
path <- commandArgs()[1]
writeLines(readLines(path))
Run Code Online (Sandbox Code Playgroud)
然后我可以从bash命令行运行:
Rscript script filename.Rmd --args dev='svg'
Run Code Online (Sandbox Code Playgroud)
并成功地将filename.Rmd回复的内容发回给我.如果不是传递上面的参数像filename.Rmd我想传递文本的文件名stdin,我尝试修改我的脚本从stdin读取:
#!/usr/bin/Rscript
writeLines(file("stdin"))
Run Code Online (Sandbox Code Playgroud)
但我不知道如何为这种情况构建命令行调用.我尝试了内容管道:
cat filename.Rmd | Rscript script --args dev='svg'
Run Code Online (Sandbox Code Playgroud)
并尝试重定向:
Rscript script --args dev='svg' < filename.Rmd
Run Code Online (Sandbox Code Playgroud)
无论哪种方式我都得到错误:
Error in writeLines(file("stdin")) : invalid 'text' argument
Run Code Online (Sandbox Code Playgroud)
(我也试过open(file("stdin"))).我不确定我是否错误地构造了Rscript,或者错误地构造了命令行参数,或者两者都没有.