我正在为xts和数据帧编写导出函数。并且要导出的数据需要始终具有相同的结构:Date列,然后是1到n个数据列。如果我在导出之前将所有内容转换为数据框,那么这已经非常有用了:
这是功能的一部分:
exportVariable<-function(VariableName){
if(exists(VariableName)){
#Variable exists already
#get because VariableName is a string
if(is.data.frame(get(VariableName))){
VariableDF<-get(VariableName)
} else if(is.xts(get(VariableName))) {
VariableDF<-data.frame(date=index(get(VariableName)),coredata(get(VariableName)))
} else {
stop("If you want to export a variable from the workspace, you need to make sure it's a data frame or xts!")
}
} else {
stop("Variable doesn't exist")
}
File<-paste("O:/users/test/desktop/","Testfile.csv",sep="")
CSVDF<-VariableDF
CSVDF[,1]<-format(CSVDF[,1],"%Y:%m:%d")
write.csv(CSVDF,file=File,row.names=FALSE,quote=FALSE)
}
但是,如果有人将自己的xts转换为数据框然后使用我的函数,它会在以后崩溃,因为我想转换日期列(假设列号为1)。下面是一些显示我的意思的例子:
library(quantmod)
getSymbols("AAPL")
AAPLDF<-as.data.frame(AAPL)
您看到这里只有一列数据框,日期列是索引。那么,如果有日期索引,我如何在我的函数中检查它是否是数据框?所以我也可以转换它:
VariableDF<-data.frame(date=index(get(VariableName)),coredata(get(VariableName)))