小编NoB*_*own的帖子

理解R中Makevars文件的内容(宏,变量,〜/ .R/Makevars和pkg/src/Makevars)

我想了解在设置宏/变量的作用和关系,~/.R/Makevars以及package_directory/src/Makevars安装时/构建自己的R包.假设这些文件看起来像

〜/ .R/Makevars

CXX = g++
CXXSTD = -std=c++11
CXXFLAGS = -fsanitize=undefined,address -fno-omit-frame-pointer

CXX98 = g++
CXX98STD = -std=c++98

CXX11 = g++
CXX11STD = -std=c++11

CXX14 = g++
CXX14STD = -std=c++14
Run Code Online (Sandbox Code Playgroud)

package_directory/SRC/Makevars

PKG_CPPFLAGS = -I../inst/include
CXX_STD = CXX11
Run Code Online (Sandbox Code Playgroud)

据我所知,CXX我们可以在构建R包时为C++选择编译器,CXXSTD我们选择标准并CXXFLAGS添加编译器标志.随着PKG_CPPFLAGS我们为C++预处理器添加标志,CXX_STD我们告诉我们的包使用C++ 11.

我有以下问题:

  • 什么是之间的关系CXXCXX98,CXX11CXX14
  • 例如,CXX11STD = -std=c++11如果已经隐含了C++ 11,那意味着什么?是在选择-std=c++11-std=gnu++11?应该-std=gnu++11通常避免针对便携性的原因?
  • 是否可以添加标志CXXSTD,CXXFLAGS …

r rcpp

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

如何在多个多面ggplot2图形中实现相同的面大小和比例?

我有一系列ggplot2具有恒定水平但不同数量的垂直面的图形.我想将图形保存为横向a4格式的.pdf.

但是,我不知道如何才能达到相同比例的方面.如果我尝试手动调整它width并且height对于不同数量的垂直面而变化,则尺度在图之间变化,即,我得到不同的点尺寸和线宽.

从本质上讲,如何为具有可变数量(垂直)刻面的绘图实现相同的刻面尺寸和刻度?

这是一个例子:

df <- expand.grid(a = 1:2, b = 1:5, x = 1:10)
df$y <- df$x
plot <- ggplot(data = df, mapping = aes(x = x, y = y)) +
            geom_point()
plot1 <- plot + facet_grid(facets = "a ~ b")
plot2 <- plot + facet_grid(facets = ". ~ b")

ggsave(filename = "./figures/plot1.pdf", plot = plot1,
   height = 210, width = 297, units = "mm")

ggsave(filename = "./figures/plot2.pdf", plot = plot2,
   height = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

每当数据发生变化时,如何子列表并触发事件?

list每当数据发生任何变化时,我都希望子类化并触发事件(数据检查).这是一个示例子类:

class MyList(list):

   def __init__(self, sequence):
        super().__init__(sequence)
        self._test()

    def __setitem__(self, key, value):
        super().__setitem__(key, value)
        self._test()

    def append(self, value):
        super().append(value)
        self._test()

    def _test(self):
        """ Some kind of check on the data. """
        if not self == sorted(self):
            raise ValueError("List not sorted.")
Run Code Online (Sandbox Code Playgroud)

在这里,我重写方法__init__,__setitem____append__检查数据是否发生变化.我认为这种方法是不可取的,所以我的问题是:如果底层数据结构发生任何类型的突变,是否有可能自动触发数据检查?

python

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

R:data.table,将组的第一个和最后一个值设置为NA

我想将组中的第一个和最后一个值设置为NA.这是一个例子:

DT <- data.table(v = rnorm(12), class=rep(1:3, each=4))
DT[, v[c(1,.N)] := NA , by=class]
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我该怎么做?

r data.table

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

ggplot2:从图中删除未使用的因子级别组合的构面(facet_grid)

我想从刻面ggplot2图中有选择地删除不必要的刻面。我看了这个问题,但不知道该怎么做(也许现在的建议已经过时了):

将空图添加到ggplot2中的facet_wrap

这是一个最小的例子。我想删除右下角的空白区域(b,2)。

library('ggplot2')
d <- data.frame('factor_1' = factor(c('a', 'a', 'b')),
                'factor_2' =    factor(c('1', '2', '1')),
                x = 1:3, y = 1:3)

ggplot(data = d, mapping = aes(x = x, y = y)) +
  geom_point() +
  facet_grid(facets = factor_1 ~ factor_2, drop = TRUE)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

显然drop = TRUE这里没有任何作用,因为没有未使用的因子水平,而只有其未使用的组合。

r ggplot2 facet-grid

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

Numba:手动循环比带有numpy数组的+ = c*b更快?

我想做一个'daxpy'(将向量添加到第二个向量的标量倍数并将结果赋给第一个)并numpy使用numba.做了以下测试,我注意到自己编写循环要快得多a += c * b.

我没想到这个.这种行为的原因是什么?

import numpy as np
from numba import jit

x = np.random.random(int(1e6))
o = np.random.random(int(1e6))
c = 3.4

@jit(nopython=True)
def test1(a, b, c):
    a += c * b
    return a

@jit(nopython=True)
def test2(a, b, c):
    for i in range(len(a)):
        a[i] += c * b[i]
    return a

%timeit -n100 -r10 test1(x, o, c)
>>> 100 loops, best of 10: 2.48 ms per loop
%timeit -n100 -r10 test2(x, o, c)
>>> …
Run Code Online (Sandbox Code Playgroud)

python numba

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

确定向量y的元素是否出现在向量x中的最快方法

我有以下问题:我有两个矢量xy类型的双被越来越多地排序和我想获得的矢量z表示的一个元素是否y存在于x.到目前为止,我已经std::binary_search在for循环中使用了如下图所示,但我认为应该有一种更快的方式来利用也x被排序的事实?问题是这需要超快,因为它证明是我的代码中的瓶颈.

对于熟悉R的人,我需要等同于match(y, x, nomatch = 0L) > 0L.

#include <iostream>
#include <algorithm>
#include <vector>

int main() {

    using namespace std;

    vector<double> x = {1.8, 2.4, 3.3, 4.2, 5.6,7.9, 8.5, 9.3};
    vector<double> y = {0.5, 0.98, 1.8, 3.1, 5.6, 6.6, 9.3, 9.3, 9.5};

    vector<bool> z(y.size());
    for (int i = 0; i != y.size(); ++i)
        z[i] = binary_search(x.begin(), x.end(), y[i]);

    for (vector<bool>::const_iterator i = z.begin(); i …
Run Code Online (Sandbox Code Playgroud)

c++

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

R:使用具有适当大小的透视图向曲面图添加点

我想实现我添加到图中的点调整其大小以获得更好的 3D 印象。我知道我必须以某种方式使用返回的变换矩阵来计算正交于 2d 平面到 3d 中相应点的向量的长度,但我不知道如何做到这一点。

下面是一个例子:

x1 <- rnorm(100)
x2 <- 4 + rpois(100, 4)
y <- 0.1*x1 + 0.2*x2 + rnorm(100)
dat <- data.frame(x1, x2, y)
m1 <- lm(y ~ x1 + x2, data=dat)

x1r <- range(dat$x1)
x1seq <- seq(x1r[1], x1r[2], length=30)
x2r <- range(dat$x2)
x2seq <- seq(x2r[1], x2r[2], length=30)
z <- outer(x1seq, x2seq, function(a,b){ 
           predict(m1, newdata=data.frame(x1=a, x2=b))
           })

res <- persp(x1seq, x2seq, z)
mypoints <- trans3d(dat$x1, dat$x2, dat$y, pmat=res)
points(mypoints, pch=1, col="red")
Run Code Online (Sandbox Code Playgroud)

r transformation

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

导入__init__.py中包中使用的模块

我有以下目录结构:

funniest/
    setup.py
    funniest/ 
          __init__.py
          ModuleA.py
          ModuleB.py
Run Code Online (Sandbox Code Playgroud)
# __init__.py
from numba import jit

from .ModuleA import ClassA
Run Code Online (Sandbox Code Playgroud)
# ModuleA.py
import funniest.ModuleB

class ClassA():
    pass
Run Code Online (Sandbox Code Playgroud)
# ModuleB.py
@jit
def f():
    pass
Run Code Online (Sandbox Code Playgroud)

但是,导入模块时,我收到错误消息:

>>> import funniest
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/domi89/Dropbox/Python_Projects/funniest/funniest  /__init__.py", line 2, in <module>
from .ModuleA import ClassA
File "/home/domi89/Dropbox/Python_Projects/funniest/funniest /ModuleA.py", line 1, in <module>
import funniest.ModuleB
File "/home/domi89/Dropbox/Python_Projects/funniest/funniest/ModuleB.py", line 1, in <module>
@jit
NameError: name 'jit' is not defined
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么会发生这种情况,因为当__init__.py …

python

3
推荐指数
2
解决办法
2844
查看次数

与Rcpp :: interfaces的C++接口不适用于返回std :: pair的函数

我想为一个返回std::pair使用的包中的函数提供一个C++接口Rcpp::interface.但是,编译器会抛出大量错误,从以下开始:

.../Rcpp/include/Rcpp/internal/Exporter.h:31:31: error: no matching
function for call to ‘std::pair<int, int>::pair(SEXPREC*&)’
   Exporter( SEXP x ) : t(x){}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子:

#include <Rcpp.h>
#include <utility>

// [[Rcpp::interfaces(cpp)]]

// [[Rcpp::export]]
std::pair<int, int> bla()
{
  return std::make_pair(1,1);
}
Run Code Online (Sandbox Code Playgroud)

此示例函数的生成代码如下所示:

inline std::pair<int, int> bla() {
    typedef SEXP(*Ptr_bla)();
    static Ptr_bla p_bla = NULL;
    if (p_bla == NULL) {
        validateSignature("std::pair<int, int>(*bla)()");
        p_bla = (Ptr_bla)R_GetCCallable("testinclude", "testinclude_bla");
    }
    RObject rcpp_result_gen;
    {
        RNGScope RCPP_rngScope_gen;
        rcpp_result_gen = p_bla();
    }
    if (rcpp_result_gen.inherits("interrupted-error"))
        throw Rcpp::internal::InterruptedException();
    if (rcpp_result_gen.inherits("try-error"))
        throw Rcpp::exception(as<std::string>(rcpp_result_gen).c_str());
    return …
Run Code Online (Sandbox Code Playgroud)

c++ rcpp

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

Rcpp 模块:具有相同数量参数的公开构造函数的验证器函数

我想公开一个带有 Rcpp 模块的 C++ 类,该模块有两个具有相同数量参数的构造函数。如Rcpp 模块小插图中所述,这可以通过使用验证器函数作为.constructor类型的第二个参数来实现

typedef bool (*ValidConstructor)(SEXP*,int);
Run Code Online (Sandbox Code Playgroud)

有人可以提供一个如何使用它的例子吗?在小插图中,只有一个 TODO 注释,其中应包含一个示例。

rcpp

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

标签 统计

r ×5

python ×3

rcpp ×3

c++ ×2

ggplot2 ×2

data.table ×1

facet-grid ×1

numba ×1

transformation ×1