【发布时间】:2021-10-10 00:34:07
【问题描述】:
以下代码对查询呈现特定响应:
library(quantmod)
# Load ticker data from 2020-01-01 till 2021-02-02
t <- c("NKLA", "MPNGF", "RMO", "JD", "MSFT")
getSymbols.yahoo(t, auto.assign = TRUE, env = globalenv(),
from = "2020-01-01", to = "2021-02-02")
# Close all Internet connections as a precaution
closeAllConnections()
# Find xts objects
x <- names(which(unlist(eapply(.GlobalEnv, is.xts))))
# Convert xts to data.frame
for (i in seq_along(x)) {
assign(x[i], fortify.zoo(get(x[i])))
}
# The query
sapply(mget(x), names)
# The rendering
NKLA MPNGF MSFT JD RMO
[1,] "Index" "Index" "Index" "Index" "Index"
[2,] "NKLA.Open" "MPNGF.Open" "MSFT.Open" "JD.Open" "RMO.Open"
[3,] "NKLA.High" "MPNGF.High" "MSFT.High" "JD.High" "RMO.High"
[4,] "NKLA.Low" "MPNGF.Low" "MSFT.Low" "JD.Low" "RMO.Low"
[5,] "NKLA.Close" "MPNGF.Close" "MSFT.Close" "JD.Close" "RMO.Close"
[6,] "NKLA.Volume" "MPNGF.Volume" "MSFT.Volume" "JD.Volume" "RMO.Volume"
[7,] "NKLA.Adjusted" "MPNGF.Adjusted" "MSFT.Adjusted" "JD.Adjusted" "RMO.Adjusted"
调整相同的代码以适应特定环境:
library(quantmod)
symbolUpdates.env <- new.env()
# Load ticker data from 2020-01-01 till 2021-02-02 to symbolUpdates.env
t2 <- c("NKLA", "MPNGF", "RMO", "JD", "MSFT")
getSymbols.yahoo(t2, auto.assign = TRUE, env = symbolUpdates.env,
from = "2020-01-01", to = "2021-02-02")
# Close all Internet connections as a precaution
closeAllConnections()
# Find xts objects in symbolUpdates.env
x2 <- names(which(unlist(eapply(symbolUpdates.env, is.xts))))
# Convert xts to data.frame that are in symbolUpdates.env
for (i2 in seq_along(x2)) {
assign(envir = symbolUpdates.env, x2[i], fortify.zoo(get(x2[i2])))
}
# The query in symbolUpdates.env
sapply(mget(x2, envir = symbolUpdates.env), names)
# The rendering from symbolUpdates.env
RMO NKLA JD MSFT MPNGF
[1,] "Index" "Index" "Index" "Index" "Index"
[2,] "Index" "Index" "Index" "Index" "Index"
[3,] "RMO.Open" "NKLA.Open" "JD.Open" "MSFT.Open" "MPNGF.Open"
[4,] "RMO.High" "NKLA.High" "JD.High" "MSFT.High" "MPNGF.High"
[5,] "RMO.Low" "NKLA.Low" "JD.Low" "MSFT.Low" "MPNGF.Low"
[6,] "RMO.Close" "NKLA.Close" "JD.Close" "MSFT.Close" "MPNGF.Close"
[7,] "RMO.Volume" "NKLA.Volume" "JD.Volume" "MSFT.Volume" "MPNGF.Volume"
[8,] "RMO.Adjusted" "NKLA.Adjusted" "JD.Adjusted" "MSFT.Adjusted" "MPNGF.Adjusted"
我的问题:
- 代码中是否有错误导致
symbolUpdates.env中出现了额外的Index列? - 如果是,它们是什么?
- 什么可以纠正这个问题?
- 另外,
symbolUpdates.env中不遵守代码的顺序,为什么?
提前致谢。
使用的系统:
- R 版本:4.1.1 (2021-08-10)
- RStudio 版本:1.4.1717
- 操作系统:macOS Catalina 版本 10.15.7 和 macOS Big Sur 版本 11.6
【问题讨论】:
-
只使用(命名的)列表而不是
assign和环境不是更容易和更干净吗? -
第二个版本中的一个错误是在
get()调用中:get(x2[i]))默认为全局环境,而不是symbolUpdates.env。 -
@user2554330,感谢您的评论。我纠正了帖子中的错误。我也在
R中做过,但问题仍然存在:我还有 2 个Index列。 -
@dario。这是可能的,但是我不知道该怎么做。你介意展示一下吗?
-
这就是我们为 R 中的命名列表分配值的方式:
new_list <- list(); new_list[["new_element"]] <- "new_element_value"。
标签: r