Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从列表中选择data.frame并从字符串中调用对象_R - Fatal编程技术网

从列表中选择data.frame并从字符串中调用对象

从列表中选择data.frame并从字符串中调用对象,r,R,我想复制Tsay在《金融时间序列》一书中的一个表,并意识到即使我能够做到这一点,我的代码似乎很笨拙,而且充满了糟糕的做法。 我尝试了一点plyr,但没有真正为我工作 这是我的代码: library(fBasics) url= 'http://faculty.chicagobooth.edu/ruey.tsay/teaching/fts3/d-ibm3dx7008.txt' table1.2 = read.table(url,header=T) l1=lapply(table1.2,basic

我想复制Tsay在《金融时间序列》一书中的一个表,并意识到即使我能够做到这一点,我的代码似乎很笨拙,而且充满了糟糕的做法。 我尝试了一点plyr,但没有真正为我工作

这是我的代码:

library(fBasics)

url= 'http://faculty.chicagobooth.edu/ruey.tsay/teaching/fts3/d-ibm3dx7008.txt'

table1.2 = read.table(url,header=T)
l1=lapply(table1.2,basicStats)
naml1 = names(l1)
datmat = as.data.frame(matrix(0,nrow=nrow(l1$Date),ncol=4))

nams = names(l1)
j=1

for( i in nams){
 datmat[,j] = eval(parse(text=paste("l1",i,sep="$")))
 j=j+1
  }

rownames(datmat)= rownames(l1[[1]])
colnames(datmat)=colnames(table1.2)
我不在乎日期的汇总统计,所以把它丢掉吧

datmat =datmat[,-1]
所以我听说应该尽可能避免eval(parse(text=)函数,我尝试了get函数,但没有成功


我只是想开始摆脱糟糕的编程习惯,所以任何建议都是非常受欢迎的。

欢迎这么说,我试图弄清楚你想要做什么,但除了阅读你的数据集,我无法得到你想要做的。尽管如此,我还是试着提出一些建议。如果你编辑你的p,也许我可以进一步帮助你ost可以更精确一点


  • 使用您可以在获得
    l1

    datmat  <- setNames(as.data.frame(l1), names(l1))
    

    您可以很容易地将等长向量列表放入data.frame,然后只需更改名称

    > df.stats <- as.data.frame(lapply(table1.2,basicStats)[-1])
    Warning message:
    In sum(X) : Integer overflow - use sum(as.numeric(.))
    > names(df.stats) <- names(table1.2)[-1]
    > str(df.stats)
    'data.frame':   16 obs. of  4 variables:
     $ rtn   : num  9.84e+03 0.00 -2.30e-01 1.32e-01 -8.57e-03 ...
     $ vwretd: num  9.84e+03 0.00 -1.71e-01 1.15e-01 -4.25e-03 ...
     $ ewretd: num  9.84e+03 0.00 -1.04e-01 1.07e-01 -2.57e-03 ...
     $ sprtr: num  9.84e+03 0.00 -2.05e-01 1.16e-01 -4.87e-03 ...
    
    >df.stats名称(df.stats)str(df.stats)
    “数据帧”:4个变量中的16个对象:
    $rtn:num 9.84e+03 0.00-2.30e-01 1.32e-01-8.57e-03。。。
    $vwrett:num 9.84e+03 0.00-1.71e-01 1.15e-01-4.25e-03。。。
    $ewretd:num 9.84e+03 0.00-1.04e-01 1.07e-01-2.57e-03。。。
    $sprtr:num 9.84e+03 0.00-2.05e-01 1.16e-01-4.87e-03。。。
    

    结果与您构建的完全一样。

    为什么要经历所有这些。看起来您正在做的是函数basicStats已经做过的事情。这看起来太简单了,不可能是正确的,但我认为下面给出了相同的输出:

    basicStats(table1.2)[,-1]
    

    哎呀,赞成的评论得到的票数比答案还多?;)
    basicStats(table1.2)[,-1]