Объединение нескольких таблиц регрессии в одну для использования в xtable с Sweave в R

xtable в Sweave отлично работает, но делает по одной таблице для каждой регрессии. Вы также можете передать ему фрейм данных, поэтому я вручную rbind и вставлял результаты во фреймы данных, но это не кажется очень масштабируемым.

Is есть ли более автоматизированное / надежное решение, которое работает как xtable , но с несколькими объектами lm ? Все ли таблицы, которые я вижу в статьях / книгах, созданы вручную? Есть ли лучшее решение для моего дряблого кода, который генерирует фрейм данных для передачи в xtable ?

    library(reshape2)

    data <- data.frame(matrix(rnorm(50), 10, 5))
    names(data) <- letters[1:5]
    l.raw <- list()
    l.raw[["a"]] <- lm(a ~ d + e, data=data)
    l.raw[["b"]] <- lm(b ~ d + e, data=data)
    l.raw[["c"]] <- lm(c ~ d + e, data=data)

    form.table.from.lm <- function(l.raw) {
    summ <- list()

    for (i in names(l.raw)) {
        temp <- coef(summary(l.raw[[i]]))
        summ[[i]] <- data.frame(param=rownames(temp), test=i, temp)
    }

    df.res <- do.call("rbind", summ)
    df.res <- transform(df.res, t.value = paste("(", signif(t.value), ")", sep=""), Estimate = signif(Estimate))
    df.res.long <- melt(df.res, id.vars=c("test", "param"))
    df.res.wide <- dcast(df.res.long, test + variable ~ param)

    temp <- subset(df.res.wide, variable %in% c("Estimate", "t.value"))
    df.res <- temp[, -2]
    df.res[, 1] <- as.vector(rbind(names(l.raw), ""))
    colnames(df.res)[1] <- "regressor"
    return(df.res)
}

Который производит фрейм данных:

   regressor (Intercept)          d          e
1          a    0.393996  -0.666721   0.159508
2             (0.573926) (0.422125) (0.526446)
5          b    0.611077  0.0288942   -0.70033
6              (0.32696)  (0.24048) (0.299911)
9          c   -0.101033  -0.287821    0.14581
10            (0.203193) (0.149449) (0.186383)

Учитывая великолепные пакеты построения графиков для R, я чувствую себя как google и rseek что-то скрывают от меня. #include используя пространство имен std; класс myiterator: публичный итератор {int * p; public: ...

Я скомпилировал следующий пример:

#include 
#include 
using namespace std;

class myiterator : public iterator
{
  int* p;
public:
  myiterator(int* x) :p(x) {}
  myiterator(const myiterator& mit) : p(mit.p) {}
  myiterator& operator++() {++p;return *this;}
  myiterator& operator++(int) {myiterator tmp(*this); operator++(); return tmp;}
  bool operator==(const myiterator& rhs) {return p==rhs.p;}
  bool operator!=(const myiterator& rhs) {return p!=rhs.p;}
  int& operator*() {return *p;}
};

int main () {
  int numbers[]={10,20,30,40,50};
  myiterator beginning(numbers);
  myiterator end(numbers+5);
  for (myiterator it=beginning; it!=end; it++)
      cout << *it << " ";
  cout << endl;

  return 0;
}

из cplusplus.com/reference и получаю предупреждение компилятора:

iterator.cpp: In member function 'myiterator& myiterator::operator++(int)':
iterator.cpp:13: warning: reference to local variable 'tmp' returned

Что здесь не так? Предполагается, что подпись постфикса должна быть myiterator operator ++ (int) , т.е. возвращаться по значению?

Где-то определено, как должна выглядеть подпись постфикса на итераторах STL?

5
задан chris 3 December 2010 в 16:32
поделиться