【发布时间】:2012-01-23 11:20:37
【问题描述】:
我是 R 新手,刚刚开始使用它。我目前正在尝试使用 quantmod 包。
quantmod 包似乎完成了我想做的大部分工作,但是,我不想使用 getSymbols() 函数将数据提取到 R 中。相反,我想使用我自己的数据 - 存储为 csv 文件我的本地磁盘。
我希望能够从我的 CSV 文件中提取数据以用于 quantmod。我来到了this article,它展示了如何读取 CSV 文件以与 quantmod 一起使用,但我不喜欢它至少有两个原因:
它会在加载到 quantmod 之前将一个新的(重新格式化的)CSV 文件写入磁盘。我宁愿在内存中做任何必要的修改,使用 R.
CSV 文件具有列标题。我的数据没有列标题。相反,这些字段位于预定的固定列位置(与 Yahoo Finance 数据表采用的“标准”格式相匹配)。
我还没有弄清楚 getSymbols() 函数返回的数据类型。我希望它返回一个数据框,但是当我检查它的类时,它被识别为一个字符向量 - 我发现这非常令人惊讶(坦率地说,不相信,因为我能够从包含的数据中绘制一个条形图在变量中):
yhoo <- getSymbols("YHOO",src="google")
class(yhoo)
[1] "character"
> yhoo
[1] "YHOO"
如果有人能展示如何编写一个小型 R 函数(很可能是 read.csv 的包装器),该函数将从我的 CSV 文件中读取数据并将其作为 R 对象(数据框?)返回以供使用,我将不胜感激使用 quantmod。
这是一些解释我想要做什么的伪代码:
# in case I need some funcs here for creating data type returned by function
library(quantmod)
loadCSVDataFile <- function(full_pathname){
csvdata <- read.csv(full_pathname, header=FALSE,sep=",")
dates <- csvdata[,1]
op <- csvdata[,2]
hi <- csvdata[,3]
lo <- csvdata[,4]
cl <- csvdata[,5]
vol <- csvdata[,6]
oi <- csvdata[,7]
# Now combine columns into a data type that matches that returned by the
# getSymbols() ....
# return(dataset)
}
[[更新]]
使用目前给出的答案,我还没有设法让它工作......:
> gbpusd <- as.xts(read.zoo('/path/to/gbpusd.csv', header=FALSE))
> class (gbpusd)
[1] "xts" "zoo"
> barChart(gbpusd)
Error in `[.xts`(x, xsubset) : subscript out of bounds
> gbpusd2 <- getSymbols.csv('gbpusd',,'/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments
>
> gbpusd2 <- getSymbols.csv('gbpusd',.GlobalEnv,'/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments
>
>
> gbpusd2 <- getSymbols.csv('gbpusd','.GlobalEnv','/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments
>
> gbpusd2 <- getSymbols.csv('gbpusd',env,'/path/to/')
Error in missing(verbose) : 'missing' can only be used for arguments
我做错了什么?
【问题讨论】:
-
(1) 您能否通过删除前导“>”并将行缩进 4 个空格来重新格式化您的第一个代码示例; (2) 我向您保证,您不能使用 4 个字母“YHOO”绘制条形图。尝试给出 [1] "xts" "zoo" 的 class(YHOO)。
-
你为什么要计算
getSymbols返回的数据类型?值部分?getSymbols告诉您它返回什么以及如何返回它。大多数 quantmod 函数还需要一个类似时间序列的对象,而 data.frames 不在此类别中。 -
顺便说一句,文档说不要直接使用 getSymbols.csv() 。使用 src='csv' 调用 getSymbols(),或使用 setSymbolLookup() 配置 quantmod 以将其视为默认值。