小编JCW*_*ong的帖子

RcppEigen中的有效加权协方差

我正在尝试生成一个可以计算一系列加权产品的函数

其中W是对角矩阵.有许多W矩阵但只有一个X矩阵.

为了有效,我可以将W表示为包含对角线部分的数组(w).然后在R中这将是 crossprod(X, w*X)

要不就 crossprod(X * sqrt(w))

我可以循环W系列,但这似乎效率低下.整个产品可以作为只有w改变才能回收第i列和第j列的产品X_i*X_j.我想要制作的功能看起来像这样

Rcpp::List Crossprod_sparse(Eigen::MappedSparseMatrix<double> X, Eigen::Map<Eigen::MatrixXd> W) {
  int K = W.cols();
  int p = X.cols();

  Rcpp::List crossprods(W.cols());

  for (int k = 0; k < K; k++) {
    Eigen::SparseMatrix<double> matprod(p, p);
    for (int i = 0; i < p; i++) {
      Eigen::SparseVector<double> prod = X.col(i).cwiseProduct(W.col(k));
      for (int j = i; j < p; j++) {
        double out = prod.dot(X.col(j));
        matprod.coeffRef(i,j) = out;
        matprod.coeffRef(j,i) = out;
      }
    }
    matprod.makeCompressed();
    crossprods[k] = matprod; …
Run Code Online (Sandbox Code Playgroud)

r rcpp eigen

17
推荐指数
1
解决办法
487
查看次数

R包链接到外部C库

我有一些利用igraph库的c代码.我想在它周围放一个R包装并将其作为R包发送给CRAN.

igraph在CRAN上已经有一个R端口,所以我的R包'foo'依赖于R的igraph是有意义的.由于foo使用自己的C代码依赖于C igraph,我如何将我的C函数链接到原始的igraph库?我已经读过这是在一个名为Makevars的文件中完成的,但链接到外部库非常多毛.

如果这是不可能的,那么复制整个igraph源代码并将整个内容放入我的/ src目录是否更好?R igraph包已经有一个名为Makevars的文件,但我不明白所有的c文件是如何构建的 - 通常在我的Makefile中我有类似gcc(一些.c源文件列表)-o,但Makevar只包含

PKG_CFLAGS=-DUSING_R -I. -Ics -Iglpk -Iglpk/amd -Iglpk/colamd \
-g -O2 -I/usr/include/libxml2 -g -O2 -I/usr/include/libxml2 -DNDEBUG \
-DPACKAGE_VERSION=\"0.6\" -DINTERNAL_ARPACK \
-DIGRAPH_THREAD_LOCAL=/**/
PKG_CXXFLAGS= -DUSING_R -DIGRAPH_THREAD_LOCAL=/**/ -DNDEBUG
PKG_LIBS=-lxml2 -lz -lpthread -licucore -lm -lgmp  $(FLIBS) $(LAPACK_LIBS) $(BLAS_LIBS)

all: $(SHLIB)
Run Code Online (Sandbox Code Playgroud)

并且没有其他Makefile.总之,如何将C代码放入依赖于另一个C库的R包中,如何编写相应的Makevars(或Makefile)来合并C函数?

这里发布一个较旧的问题,但似乎只是链接到帮助编写自己的C代码,而不依赖于任何东西.

c linker r graph igraph

16
推荐指数
2
解决办法
2255
查看次数

Google表格Java API找不到client_secrets?

我正在按照教程说明如何使用Java连接谷歌表.它使用gradle来获取依赖关系

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'Quickstart'
sourceCompatibility = 1.8
targetCompatibility = 1.8
version = '1.0'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.google.api-client:google-api-client:1.22.0'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.22.0'
    compile 'com.google.apis:google-api-services-sheets:v4-rev483-1.22.0'
}
Run Code Online (Sandbox Code Playgroud)

当我从IntelliJ内部运行示例QuickStart.java类时,我可以看到周围的错误

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.*;
import com.google.api.services.sheets.v4.Sheets;
Run Code Online (Sandbox Code Playgroud)

说找不到图书馆.在IntelliJ的工具栏中,我转到了文件 - >项目结构 - >依赖项,并添加了build.gradle中的3个项目.之后,围绕进口的错误消失了.当我上课时,我得到了

    objc[1649]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java (0x102cf14c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x102db94e0). One of …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea google-sheets google-sheets-api

8
推荐指数
1
解决办法
371
查看次数

R:创建稀疏模型矩阵的快速方法

我正在尝试使用具有许多交互项的公式创建模型矩阵(一些连续,一些0-1,一些具有多个级别的因素).这个模型矩阵的创建是我脚本的瓶颈.最后,模型矩阵是8M行,1000列.由于具有多个级别的因子是0-1编码的,因此表示交互的结果矩阵非常稀疏,因此我已经使用了sparse.model.matrix.

有没有更快的方法来生成这个矩阵?也许在Rcpp?

r

7
推荐指数
1
解决办法
1861
查看次数

Django和交互式图形/网络可视化

我正在创建一个Django应用程序,并希望拥有社交网络的可视化.我正在寻找一个可以绘制图形/网络数据结构的库,但也可以使它具有交互性.我希望能够点击一个节点,并在页面上的其他位置显示该节点的信息(名称,网络等)

到目前为止,我发现python-graph和graphviz是非常强大的可视化工具,但它们创建静态图像,因此您无法单击它们.我也找到了这个帖子

JavaScript中的图形可视化库

这有很多建议,但其中一些是图表中的图形,而不是社交网络图形中的图形.其中一些是非常老的,其中一些是交互式的,因为节点可以被拖动并移动到画布上的其他位置.我不太关心用户能够更改图形,我只是想让节点对象携带可以在某处显示的数据.

有什么建议?

django visualization graph social-networking

6
推荐指数
2
解决办法
1万
查看次数

R查找字符串向量的最快方法

我有一个字符串x = c("hello", "world")向量和另一个向量y = c("hello", "world", "how", "are", "you")。我想看看 x 的哪些元素在 y 里面。对于小向量,这可以很容易地使用x %in% y. 但是,我正在寻找一种更有效的方法来执行此操作 - 通常我们会先O(n log n)及时对 y 进行排序,然后在 x 中使用 foreach 字符串,我们可以及时进行查找O(log n)。我担心 %in% 正在对它查找的每个 x 进行完整的传递。

有没有办法在 R 中利用排序和二分搜索?或者有没有办法从 y 构建哈希集以加快查找时间?

sorting lookup search r

6
推荐指数
0
解决办法
1072
查看次数

测试矩阵是否为稀疏矩阵

在 R 中,有没有办法判断矩阵是否稀疏?稀疏矩阵类有很多,比如dgCMatrix,没有is.sparseMatrix方法。

r sparse-matrix

5
推荐指数
1
解决办法
1457
查看次数

R:在将变量传递给函数时阻止复制

Hadley的新pryr包显示变量的地址非常适合分析.我发现无论何时将变量传递给函数,无论该函数做什么,都会创建该变量的副本.此外,如果函数体将变量传递给另一个函数,则会生成另一个副本.这是一个明显的例子

n = 100000
p = 100

bar = function(X) {
  print(pryr::address(X))
}

foo = function(X) {
  print(pryr::address(X))
  bar(X)
}

X = matrix(rnorm(n*p), n, p)
print(pryr::address(X))
foo(X)
Run Code Online (Sandbox Code Playgroud)

哪个生成

> X = matrix(rnorm(n*p), n, p)
> print(pryr::address(X))
[1] "0x7f5f6ce0f010"
> foo(X)
[1] "0x92f6d70"
[1] "0x92f3650"
Run Code Online (Sandbox Code Playgroud)

尽管功能没有做任何事情,地址每次都会改变.我对这种行为感到困惑,因为我听说R描述为写入时的副本 - 因此可以传递变量,但只有当函数想要写入该变量时才会生成副本.这些函数调用发生了什么?

为了获得最佳的R开发,最好不要编写多个小函数,而是将内容保存在一个函数中?我也发现了一些关于Reference Classes的讨论,但我看到很少有R开发人员使用它.是否有另一种有效的方法来传递我错过的变量?

r

3
推荐指数
1
解决办法
125
查看次数

ggplot绘图列表到一个pdf具有不同的页面布局

我想制作一个包含许多ggplots页面的pdf.使用gridExtra,我还可以构建一个带有m x n布局的图表页面(图表m行,图表n列).

该功能ggsave让我写地块的页面,即使是带有内置那些gridExtra具有m x n布局.

只要每个页面具有相同的布局,使用arrangeGrob它甚至可以将ggsave许多页面转换为单个pdf m x n.

我想知道如何ggsave列出具有不同页面布局的图表?例如,我有一个列表,l长度为3表示3页.

l[[1]]是一个2 x 2布局的页面,有4个图

l[[2]]2 x 1有2个地块

l[[3]] 只是 1 x 1

我怎么能破解ggsave以便我可以将列表l写入1个pdf文件,其中3个页面具有不同的布局?这些图应以横向显示,因此通常命令将具有该表单

ggsave("multipage.pdf", do.call(arrangeGrob, myplots[[i]]), width=11, height=8.5)
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gridextra

2
推荐指数
1
解决办法
755
查看次数

R如何使用bigints?

我有一个18位的int,R不理解,它返回的值与我输入的值不同

options(digits = 22)
> as.numeric(123456789123456789)
[1] 123456789123456784
Run Code Online (Sandbox Code Playgroud)

当使用具有integer64类的bit64时也是如此

> as.integer64(123456789123456789)
integer64
[1] 123456789123456784
Run Code Online (Sandbox Code Playgroud)

是否有其他包可以正确解释这个数字?

r bigint

1
推荐指数
1
解决办法
165
查看次数

使用带有lambda函数的RcppArmadillo each_col?

根据Armadillo网站,您可以将lambda函数传入.each_col,例如

X.each_col( [](vec& a){ a.print(); } );

以下Rcpp似乎有错误,报告“预期表达式”

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;
using namespace arma;

// [[Rcpp::export]]
arma::vec colCumSum(const arma::mat& X) {
  return X.each_col( [](const arma::vec& b){ b.cumsum(); } );  
}
Run Code Online (Sandbox Code Playgroud)

r rcpp

1
推荐指数
1
解决办法
185
查看次数

Rcpp本征稀疏矩阵绑定

我正在Rcpp(Eigen)中开发一种算法,该算法要求矩阵使用cbind。我发现R的绑定速度非常快,而使用Eigen的速度非常慢。我想找到一种优化此功能的方法,以便将算法保留在Rcpp中。到目前为止,我已经找到了另一个链接,但是它适用于密集矩阵上的cbind

#include <RcppEigen.h>
// [[Rcpp::depends(RcppEigen)]]

using namespace Rcpp;
using namespace Eigen;

// [[Rcpp::export]]
Eigen::SparseMatrix<double> RcppMatrixCbind(Eigen::MappedSparseMatrix<double>& matrix1,
                                            Eigen::MappedSparseMatrix<double>& matrix2) {

  SparseMatrix<double> out(matrix1.rows(), matrix1.cols() + matrix2.cols());
  std::vector<Triplet<double> > tripletList;
  tripletList.reserve(matrix1.nonZeros() + matrix2.nonZeros());
  for (int k = 0; k < matrix1.outerSize(); ++k)
  {
    for (MappedSparseMatrix<double>::InnerIterator it(matrix1, k); it; ++it)
    {
      tripletList.push_back(Triplet<double>(it.row(), it.col(), it.value()));
    }
  }
  for (int k = 0; k < matrix2.outerSize(); ++k)
  {
    for (MappedSparseMatrix<double>::InnerIterator it(matrix2, k); it; ++it)
    {
      tripletList.push_back(Triplet<double>(it.row(), it.col() + matrix1.cols(), it.value()));
    }
  }
  out.setFromTriplets(tripletList.begin(), tripletList.end()); …
Run Code Online (Sandbox Code Playgroud)

r matrix rcpp eigen

1
推荐指数
1
解决办法
256
查看次数

特征 - .cwiseProduct 的返回类型?

我正在 RcppEigen 中编写一个用于加权协方差的函数。在其中一个步骤中,我想获取矩阵 X 的第 i 列和第 j 列,并计算应该返回某种向量的 cwiseProduct。cwiseProduct 的输出将进入一个可以多次重复使用的中间变量。从文档看来,cwiseProduct返回一个CwiseBinaryOp,它本身有两种类型。我的 cwiseProduct 对两个列向量进行操作,所以我认为正确的返回类型应该是Eigen::CwiseBinaryOp<Eigen::ColXpr, Eigen::ColXpr>,但是我收到错误no member named ColXpr in namespace Eigen

#include <RcppEigen.h>
// [[Rcpp::depends(RcppEigen)]]

Rcpp::List Crossprod_sparse(Eigen::MappedSparseMatrix<double> X, Eigen::Map<Eigen::MatrixXd> W) {
  int K = W.cols();
  int p = X.cols();

  Rcpp::List crossprods(W.cols());

  for (int i = 0; i < p; i++) {
    for (int j = i; j < p; j++) {
      Eigen::CwiseBinaryOp<Eigen::ColXpr, Eigen::ColXpr> prod = X.col(i).cwiseProduct(X.col(j));
      for (int k = 0; k < K; …
Run Code Online (Sandbox Code Playgroud)

rcpp eigen

0
推荐指数
1
解决办法
1498
查看次数