我想了解在设置宏/变量的作用和关系,~/.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.
我有以下问题:
CXX和CXX98,CXX11和CXX14?CXX11STD = -std=c++11如果已经隐含了C++ 11,那意味着什么?是在选择-std=c++11和-std=gnu++11?应该-std=gnu++11通常避免针对便携性的原因?CXXSTD,CXXFLAGS …我有一系列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) 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__检查数据是否发生变化.我认为这种方法是不可取的,所以我的问题是:如果底层数据结构发生任何类型的突变,是否有可能自动触发数据检查?
我想将组中的第一个和最后一个值设置为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)
但这不起作用.我该怎么做?
我想从刻面ggplot2图中有选择地删除不必要的刻面。我看了这个问题,但不知道该怎么做(也许现在的建议已经过时了):
这是一个最小的例子。我想删除右下角的空白区域(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这里没有任何作用,因为没有未使用的因子水平,而只有其未使用的组合。
我想做一个'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) 我有以下问题:我有两个矢量x和y类型的双被越来越多地排序和我想获得的矢量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) 我想实现我添加到图中的点调整其大小以获得更好的 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) 我有以下目录结构:
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 …
我想为一个返回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) 我想公开一个带有 Rcpp 模块的 C++ 类,该模块有两个具有相同数量参数的构造函数。如Rcpp 模块小插图中所述,这可以通过使用验证器函数作为.constructor类型的第二个参数来实现
typedef bool (*ValidConstructor)(SEXP*,int);
Run Code Online (Sandbox Code Playgroud)
有人可以提供一个如何使用它的例子吗?在小插图中,只有一个 TODO 注释,其中应包含一个示例。