linux-如何使用/ dev / stdin和read.csv()从终端读取输入?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-如何使用/ dev / stdin和read.csv()从终端读取输入?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1582字,纯文字阅读大概需要3分钟。
内容图文
![linux-如何使用/ dev / stdin和read.csv()从终端读取输入?](/upload/InfoBanner/zyjiaocheng/950/5993d7930d784a46920b8560f8cd2378.jpg)
我正在使用:
R version 3.0.0 (2013-04-03) -- "Masked Marvel"
Platform: x86_64-pc-linux-gnu (64-bit)
我尝试使用read.csv直接从终端输入一些CSV数据片段标题.
我遇到的问题可能与R skips lines from /dev/stdin和read.csv, header on first line, skip second line有关,但又相异(问题的答案没有解释我在这里看到的内容),因此需要单独提出一个问题.
R似乎跳过标题行并将第二(数据)行视为标题:
R> d <- read.csv(file='/dev/stdin', header=TRUE)
a,b
1,2
3,4
# hit CTRL-D twice here to end the input
# (this is also unexpected:
# when reading a few lines interactively in bash, one CTRL-D suffices.
# Why is doing it twice necessary in R?)
R> d
X1 X2
1 3 4
R> colnames(d)
[1] "X1" "X2"
我找到了一种解决方法:由于默认情况下read.csv具有blank.lines.skip = TRUE,所以我在输入前加上一些空行.开始输入之前的5条空行似乎是使它按预期工作所需的最低要求.顺便说一句:包含5个空格的一行也可以,提示需要5个字节(或更多)的空白填充:
R> d <- read.csv(file='/dev/stdin', header=TRUE)
a,b
1,2
3,4
# Enter CTRL-D twice here to mark the end of terminal input
R> d
a b
1 1 2
2 3 4
R> colnames(d)
[1] "a" "b"
问题:
>为什么第一个示例无法按预期运行?
>为什么需要5个空白行或空格(即使4个空格也不够)才能使其正常工作?
>是否有更好的方法可以直接从终端读取简短的csv代码段?
(我知道scan和readLines,但是我的数据已经是csv格式,因此我想使其尽可能简单地读取/解析/分配)
解决方法:
我认为您发布的第一个链接中的答案可能确实适用. R似乎在/ dev / stdin上创建了一个4字节的缓冲区.另外,如评论中所述,您可以改用stdin,它似乎可以正常工作. (尽管我仍然不明白为什么您必须两次按Ctrl D).
d <- read.csv(file='stdin', header=TRUE)
a,b
1,2
3,4
# Hit Control+D twice.
> d
a b
1 1 2
2 3 4
内容总结
以上是互联网集市为您收集整理的linux-如何使用/ dev / stdin和read.csv()从终端读取输入?全部内容,希望文章能够帮你解决linux-如何使用/ dev / stdin和read.csv()从终端读取输入?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。