【问题标题】:Code running but giving error when knit in r代码运行但在r中编织时出错
【发布时间】:2018-11-23 00:10:02
【问题描述】:

当我们在 Markdown 中运行块代码时,此代码运行正常。

```{r , echo = FALSE, results='asis', comment=NA, warning=FALSE, message=FALSE}
options("getSymbols.warning4.0"=FALSE)
options("getSymbols.yahoo.warning"=FALSE)
library(plyr)
library(knitr)
library(ggplot2)
library(quantmod)
library(lubridate)
library(scales)
comp.name <- readline(prompt = "Enter the company name: ")
tyu2 <- getSymbols(comp.name , src = "yahoo", verbose = TRUE, from = "2018-03-01", auto.assign = FALSE)
tyu2 <- as.data.frame(tyu2)
tyu <- tyu2[,6]
x <- row.names(tyu2)
final <- length(tyu)
final <- as.numeric(final)
p <- ggplot(data = tyu2 , aes(x= x ,y=tyu))+geom_bar(stat = "identity", fill = "blue")+ theme(axis.text.x = element_text(angle = 90))
p
```

但是当尝试用markdown编织时,它会报错

Error in `[.data.frame`(tyu2, , 6) : undefined columns selected
Calls: <Anonymous> ... withCallingHandlers -> withVisible -> eval -> eval -> [ -> [.data.frame

这个错误是什么意思。如何解决。请帮忙。在线找到安装所有软件包的答案。一切都安装好了。

【问题讨论】:

  • 不,有 6 列,但即使我将 6 更改为 1,仍然会显示相同的错误。数据下载正常。如果仅使用 Control+Enter 运行,它将正常运行。但我需要编写代码

标签: r r-markdown knitr


【解决方案1】:

您的代码有一行供用户输入。但是,假设用户没有输入任何内容,knitr 将跳转到下一行。这意味着 comp.name 将是 "" 并且 getSymbols() 检索空数据,这意味着所有列在技术上都是未定义的。

我建议进行以下更改:

```{r , echo = FALSE, results='asis', comment=NA, warning=FALSE, message=FALSE}
options("getSymbols.warning4.0"=FALSE)
options("getSymbols.yahoo.warning"=FALSE)
library(plyr)
library(knitr)
library(ggplot2)
library(quantmod)
library(lubridate)
library(scales)
comp.name <- readline(prompt = "Enter the company name: ")
# For case user inpt is empty
if (comp.name == "") {
  comp.name <- "AAPL"
}
tyu2 <- getSymbols(comp.name , src = "yahoo", verbose = TRUE, from = "2018-03-01", auto.assign = FALSE)
tyu2 <- as.data.frame(tyu2)
tyu <- tyu2[,6]
x <- row.names(tyu2)
final <- length(tyu)
final <- as.numeric(final)
p <- ggplot(data = tyu2 , aes(x= x ,y=tyu))+geom_bar(stat = "identity", fill = "blue")+ theme(axis.text.x = element_text(angle = 90))
p
```

我可以很好地编织这个。

【讨论】:

  • 但它不会总是显示苹果数据库。如果我想让它变得用户友好怎么办?
  • 如果用户没有输入任何内容,它只会显示APPL的结果。你也可以考虑写一个warning(),比如“没有输入数据。回退到显示'APPL'的结果”。在更广泛的一点上:你为什么要首先编织这个?如果您期望用户输入,那么 knitr 脚本似乎是错误的地方,因为它在运行时无法接收输入...
  • 是的,我知道我做错了。使用闪亮的应用程序使其更具交互性更好
  • 我认为闪亮的应用程序将是前进的好方法!我通过一些视频教程学到了闪亮的东西。我认为是这个:shiny.rstudio.com/tutorial 如果您对此没有更多问题,请考虑接受我的回答,关闭此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2015-02-09
相关资源
最近更新 更多