2017-04-19 73 views
0

我的一个脚本有重复的代码段为:函数内识别变量名

cat(capture.output(describe(semWellCases$di)), 
       file="./output/descriptivestats.txt", 
       sep="\n",append=TRUE) 

cat(capture.output(describe(semWellCases$dd)), 
       file="./output/descriptivestats.txt", 
       sep="\n",append=TRUE) 

cat(capture.output(describe(semWellCases$fas)), 
       file="./output/descriptivestats.txt", 
       sep="\n",append=TRUE) 

本节的目标是创造一个文件,并追加统计每个变量的文件。我试图使它成为一个功能部分工作:

descriptiveStats <- function (vars, filename) { 
    for (i in vars) { 
    cat(capture.output(describe(i)), 
     file=filename, 
     sep="\n",append=TRUE) 
} 
} 

我与拨打:

descriptiveStats(semWellCases[c("di","dd", "fas")], "./output/stats.txt") 

的问题是输出文件没有变量名,他们都被列为i,这是我在用于循环的名称:

1 Variables  195 Observations 
-------------------------------------------------------------------------------- 
i 
     n missing distinct  Info  Mean  Gmd  .05  .10 
    195  0  13 0.982 5.574 2.891  2.0  3.0 
    .25  .50  .75  .90  .95 
    4.0  5.0  7.0  9.0  9.3 

Value   2  3  4  5  6  7  8  9 10 11 12 
Frequency  15 32 37 23 24 20 18 16  5  2  1 
Proportion 0.077 0.164 0.190 0.118 0.123 0.103 0.092 0.082 0.026 0.010 0.005 

Value   14 28 
Frequency  1  1 
Proportion 0.005 0.005 
-------------------------------------------------------------------------------- 

在一系列附加几个描述()输出后,变得不可能识别摘要到相应的变量。

  • 如何在每个describe()输出之前打印传递给该函数的变量名称?
+0

输出之前,他们是如何列为'i'?是'stats.txt'有问题,因为你不知道它来自哪里? –

+0

请参阅描述输出()的第三行,那里有'i'。我希望它是变量的名称,无论是'dd','fas'还是'di' ... –

回答

1

你可以通过data.frame的名称中选择循环并打印打印从describe

descriptiveStats <- function (vars, filename) { 
    for (i in names(vars)) { 
     cat(paste0(i, "\n"), file=filename, append=TRUE) 
     cat(capture.output(describe(vars[,i])), 
      file=filename, 
      sep="\n",append=TRUE) 
    } 
} 
+0

对于一个常规数据帧'vars [,i]'或'vars [,i,drop = FALSE ]'是非常安全的使用... –

+0

谢谢,@RomanLuštrik。我可以问任何理由为什么''[[''不是首选? – chinsoon12

+1

不要误解我的意思,'[[''对于data.frames(这是特殊类型的列表)非常好,但是使用'['暗示子集对象是一个data.frame(或一个矩阵),而不是一个列表本身。也许增加了一点可读性。随意使用任何范例。 –