readLines函数在新版本的R中的使用方法

11

我的函数是:

create_matrix <- function() {
  cat("Write the numbers of vertices: ")
  user_input <- readLines("stdin", n=1)
  user_input <- as.numeric(user_input)
  print(user_input)
  }

在3.5.0版本中,当我输入数据后,程序没有继续执行。我是直接从控制台调用脚本。


1
“不起作用”具体指什么? - Roland
抱歉,它继续执行但不等待我的输入并给我NA值。 - Dr.mincode
1
你能否添加更多细节,特别是关于如何使用Rscript“输入数据”?如果您能改进这个问题,我会考虑附加赏金,因为我认为这可能是一个有趣的问题。 - Roland
1
请将实际代码和脚本的最小示例编辑到问题中。 - Roland
3
R-patched 中有关于可寻址流和 stdin 的错误修复,可能是你遇到了这个问题。 - Dirk Eddelbuettel
显示剩余11条评论
2个回答

6

使用不同的Docker镜像进行测试结果如下:

  • 使用rocker/r-ver:3.4.4中的R version 3.4.4 (2018-03-15) -- "Someone to Lean On",示例正常工作。
  • 使用rocker/r-ver:3.5.0中的R version 3.5.0 (2018-04-23) -- "Joy in Playing",示例出现了卡顿问题。
  • 使用rocker/drd中的R Under development (unstable) (2018-05-19 r74746) -- "Unsuffered Consequences",示例出现了卡顿问题。

看起来版本3.5.1中发布说明中提到的更改与此无关。我已将我的研究结果发送给r-devel,并将报告结果:

  • 使用R version 3.5.1 (2018-07-02) -- "Feather Spray",示例正常工作。
  • 错误已被标记为已修复。我可以断言,版本R Under development (unstable) (2018-06-02 r74838) -- "Unsuffered Consequences"正常工作。

  • 被视为错误,但尚不清楚如何以及何时修复它。

  • 一个合理的解决方法:除了行末之外,还要发送文件结束符(EOF,Ctrl-D)。


你可以分享你的 Docker 脚本吗? - Technophobe01
@Technophobe01 所有的Docker镜像都可以通过Rocker项目在Docker Hub上获取。还有其他你感兴趣的吗? - Ralf Stubner
谢谢,根据笔记我猜测你写了一个Docker脚本来下载镜像并运行代码。如果不是的话也没关系。 - Technophobe01

2

TLDR: 使用stdin()

如果使用stdin()而不是"stdin",它可以正常工作...我们也建议您这样做。

但可能为了向后兼容性,“stdin”也应该工作((或者发出弃用警告并暂时工作)


1
stdin() 在交互式会话中可以工作,但在从控制台启动脚本时无法工作。您在 r-devel 上的第一个建议(发送 EOF / Ctrl-D)效果很好。 - Ralf Stubner
你是对的,我之前错了:stdin()在脚本中不可用,只能在交互式环境中使用。 - Martin Mächler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接