迭代R脚本作为顺序调查问题的函数

时间:2009-09-16 02:06:31

标签: r survey

以下功能完全符合我的目的。显示很棒。现在我的问题是我需要能够在其他适合其他模式的变量上再次执行此操作。

在这个例子中,我输出了“q4a”的结果,我希望能够按照以下模式的问题顺序进行:q4< a - z>或者q< 4-10<< 4> a - z>,自动化。

有没有办法迭代这个,这样指定的变量(在这种情况下是q4a)每次都会改变?

这是我的功能:

require(reshape) # Using it for melt
require(foreign) # Using it for read.spss

d1 <- read.spss(...) ## Read in SPSS file

attach(d1,warn.conflicts=F) ## Attach SPSS data

q4a_08 <- d1[,grep("q4a_",colnames(d1))] ## Pull in everything matching q4a_X
q4a_08 <- melt(q4a_08) ## restructure data for post-hoc

detach(d1)

q4aaov <- aov(formula=value~variable,data=q4a) ## anova

提前致谢!

2 个答案:

答案 0 :(得分:4)

不确定这是否是您要找的,但要生成问题列表:

> gsub('^', 'q', gsub(' ', '', 
    apply(expand.grid(1:10,letters),1,
           function(r) paste(r, sep='', collapse='')
         )))
  [1] "q1a"  "q2a"  "q3a"  "q4a"  "q5a"  "q6a"  "q7a"  "q8a"  "q9a"  "q10a"
 [11] "q1b"  "q2b"  "q3b"  "q4b"  "q5b"  "q6b"  "q7b"  "q8b"  "q9b"  "q10b"
 [21] "q1c"  "q2c"  "q3c"  "q4c"  "q5c"  "q6c"  "q7c"  "q8c"  "q9c"  "q10c"
 [31] "q1d"  "q2d"  "q3d"  "q4d"  "q5d"  "q6d"  "q7d"  "q8d"  "q9d"  "q10d"
 [41] "q1e"  "q2e"  "q3e"  "q4e"  "q5e"  "q6e"  "q7e"  "q8e"  "q9e"  "q10e"
 [51] "q1f"  "q2f"  "q3f"  "q4f"  "q5f"  "q6f"  "q7f"  "q8f"  "q9f"  "q10f"
 [61] "q1g"  "q2g"  "q3g"  "q4g"  "q5g"  "q6g"  "q7g"  "q8g"  "q9g"  "q10g"
 [71] "q1h"  "q2h"  "q3h"  "q4h"  "q5h"  "q6h"  "q7h"  "q8h"  "q9h"  "q10h"
 [81] "q1i"  "q2i"  "q3i"  "q4i"  "q5i"  "q6i"  "q7i"  "q8i"  "q9i"  "q10i"
 [91] "q1j"  "q2j"  "q3j"  "q4j"  "q5j"  "q6j"  "q7j"  "q8j"  "q9j"  "q10j"
 ...

然后将分析的内部部分转换为将问题前缀作为参数的函数:

analyzeQuestion <- function (prefix)
{
  q <- d1[,grep(prefix,colnames(d1))] ## Pull in everything matching q4a_X
  q <- melt(q) ## restructure data for post-hoc

  qaaov <- aov(formula=value~variable,data=q4a) ## anova
  return (LTukey(q4aaov,which="",conf.level=0.95)) ## Tukey's post-hoc
}

现在 - 我不确定你的'q4a'变量来自哪里(如aov(..., data=q4a)中所使用的那样 - 所以不知道该怎么办。但希望这会有所帮助。

要将两者组合在一起,您可以使用sapply()analyzeQuestion函数应用于我们自动生成的每个前缀。

答案 1 :(得分:3)

我建议熔化整个数据集,然后将variable拆分成其组件。然后,您可以更轻松地使用子集来查看(例如)问题四:subset(molten, q = 4)