Итерация R-скрипта как функция последовательных вопросов опроса - PullRequest
0 голосов
/ 16 сентября 2009

Функция ниже работает идеально для моей цели. Дисплей замечательный. Теперь моя проблема в том, что мне нужно многократно делать это с другими переменными, которые соответствуют другим шаблонам.

В этом примере я вывел результаты для "q4a", я хотел бы иметь возможность сделать это для последовательности вопросов, которые следуют шаблонам, таким как: q4 или q <4 - 10> , автоматически.

Есть ли способ повторить это так, чтобы указанная переменная (в данном случае 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 ]

4 голосов
/ 16 сентября 2009

Не уверен, что это то, что вы ищете, но для генерации списка вопросов:

> 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 к каждому из автоматически созданных префиксов.

3 голосов
/ 16 сентября 2009

Я бы порекомендовал расплавить весь набор данных, а затем разделить variable на составные части. Тогда вы можете более легко использовать подмножество, чтобы рассмотреть (например) только вопрос четыре: subset(molten, q = 4).

...