This file is indexed.

/usr/lib/R/site-library/dplyr/include/dplyr/DataFrameSubsetVisitors.h is in r-cran-dplyr 0.7.4-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#ifndef dplyr_DataFrameSubsetVisitors_H
#define dplyr_DataFrameSubsetVisitors_H

#include <tools/pointer_vector.h>
#include <tools/match.h>
#include <tools/utils.h>

#include <dplyr/tbl_cpp.h>
#include <dplyr/subset_visitor.h>
#include <dplyr/bad.h>

namespace dplyr {

class DataFrameSubsetVisitors {
private:

  const Rcpp::DataFrame& data;
  pointer_vector<SubsetVectorVisitor> visitors;
  SymbolVector visitor_names;
  int nvisitors;

public:
  typedef SubsetVectorVisitor visitor_type;

  DataFrameSubsetVisitors(const Rcpp::DataFrame& data_) :
    data(data_),
    visitors(),
    visitor_names(data.names()),
    nvisitors(visitor_names.size())
  {
    CharacterVector names = data.names();
    for (int i = 0; i < nvisitors; i++) {
      SubsetVectorVisitor* v = subset_visitor(data[i], names[i]);
      visitors.push_back(v);
    }
  }

  DataFrameSubsetVisitors(const DataFrame& data_, const SymbolVector& names) :
    data(data_),
    visitors(),
    visitor_names(names),
    nvisitors(visitor_names.size())
  {

    CharacterVector data_names = data.names();
    IntegerVector indx = names.match_in_table(data_names);

    int n = indx.size();
    for (int i = 0; i < n; i++) {

      int pos = indx[i];
      if (pos == NA_INTEGER) {
        bad_col(names[i], "is unknown");
      }

      SubsetVectorVisitor* v = subset_visitor(data[pos - 1], data_names[pos - 1]);
      visitors.push_back(v);

    }

  }

  template <typename Container>
  DataFrame subset(const Container& index, const CharacterVector& classes) const {
    List out(nvisitors);
    for (int k = 0; k < nvisitors; k++) {
      out[k] = get(k)->subset(index);
    }
    copy_most_attributes(out, data);
    structure(out, output_size(index), classes);
    return out;
  }

  inline int size() const {
    return nvisitors;
  }
  inline SubsetVectorVisitor* get(int k) const {
    return visitors[k];
  }

  const SymbolString name(int k) const {
    return visitor_names[k];
  }

  inline int nrows() const {
    return data.nrows();
  }

private:

  inline void structure(List& x, int nrows, CharacterVector classes) const {
    set_class(x, classes);
    set_rownames(x, nrows);
    x.names() = visitor_names;
    copy_vars(x, data);
  }

};

template <>
inline DataFrame DataFrameSubsetVisitors::subset(const LogicalVector& index, const CharacterVector& classes) const {
  const int n = index.size();
  std::vector<int> idx;
  idx.reserve(n);
  for (int i = 0; i < n; i++) {
    if (index[i] == TRUE) {
      idx.push_back(i);
    }
  }
  return subset(idx, classes);
}

template <typename Index>
DataFrame subset(DataFrame df, const Index& indices, const SymbolVector& columns, const CharacterVector& classes) {
  return DataFrameSubsetVisitors(df, columns).subset(indices, classes);
}

template <typename Index>
DataFrame subset(DataFrame df, const Index& indices, CharacterVector classes) {
  return DataFrameSubsetVisitors(df).subset(indices, classes);
}

} // namespace dplyr

#include <dplyr/subset_visitor_impl.h>

#endif