将布尔R矢量传递给C++ dynamic_bitset向量的最佳方法是什么?有没有办法使用指针和向量长度来构造一个dynamic_bitset对象,就像矢量类一样?你会推荐使用Rcpp吗?
谢谢你的帮助和时间......
使用区别的是:
getResources().getText(R.string.hello_world)
Run Code Online (Sandbox Code Playgroud)
和:
R.string.hello_world
Run Code Online (Sandbox Code Playgroud)
第二种方式,应该返回一个int对象.我刚尝试过:
Toast.makeText(getApplicationContext(), getResources().getText(R.string.hello_world), Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
和:
Toast.makeText(getApplicationContext(), R.string.hello_world, Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
似乎在两个方面都有效.
感谢帮助!
我正在通过Linux Mint 16命令行运行R脚本.它包含一个我想在窗口中显示的箱线图.所以我正在使用x11()函数来创建该窗口.这是我的代码:
testdata <- data.frame(sample(1:1000,size=100,replace=T), row.names=NULL)
colnames(testdata)<-c("data")
x11()
boxplot(testdata, main="Boxplot der Testdaten", horizontal=TRUE)
Run Code Online (Sandbox Code Playgroud)
当我在Rstudio中运行此函数时,它将打开一个窗口并显示创建的boxplot.但每当我从Linux Mint 16机器的命令行运行它时,窗口将打开一秒钟然后再次关闭.我可以看到箱形图一秒钟.我真的找不到理由.我对R很新,从未使用过X11.任何想法都会非常感激.谢谢!
如果我使用的值是前 30 个值的异常值,我需要计算 ts。我正在处理的数据的维度为 600 列 x 200000 行。所以我想利用数据表速度的好处。
我的功能是:
es_outlier<-function(vect){
qq =quantile(vect, prob=c(0.25,0.75), na.rm=T)
q3=qq[2]
IC=q3-qq[1]
limSup=q3+IC*1.5
vector_final=abs(vect)>limSup
return(vector_final[length(vect)] )
}
Run Code Online (Sandbox Code Playgroud)
一个示例表是:
library(data.table)
dt<-data.table(x1=runif(50000), x2=runif(50000))
dt$x1[555]<-2000
dt$x2[556]<-2000
Run Code Online (Sandbox Code Playgroud)
我可以用 zoo 包解决这个问题:
zoo::rollapply(dt,30,es_outlier, fill=NA,align='right')
Run Code Online (Sandbox Code Playgroud)
但这需要很多时间,而且比我的真实数据要少。
我想要类似的东西:
dt[, (nom):=lapply(.SD,function, n=30)]
Run Code Online (Sandbox Code Playgroud)
我尝试使用 Rcpp,但它没有分位数功能。
有没有更快的方法来应用我的功能?
PS:对于一个小表,函数返回:
x<-data.frame(x1=1:8, x2=c(1:7,2000))
x_dt<-data.table(x)
zoo::rollapply(x_dt,5,es_outlier, fill=NA,align='right')
x1 x2
NA NA
NA NA
NA NA
NA NA
FALSE FALSE
FALSE FALSE
FALSE FALSE
FALSE TRUE
Run Code Online (Sandbox Code Playgroud) 我的一个旧项目已经开始显示一个新的行为,一个已经可供R包使用的fortran子程序不再可用.该包在src/目录中包含C++和Fortran代码.显然C++方法可用,但Fortran子程序不可用.
您可以在我的github 页面上查看代码库 .
重现错误所需的细节如下
# Install the specific version of the sccm package (including dependencies)
devtools::install_github("dewittpe/sccm@72375b2f347667119215eab708ebdfdec78fdfb2")
Run Code Online (Sandbox Code Playgroud)
我们从sccm包和示例数据集加载共享对象.dyn.load(list.files(system.file("libs",package ="sccm"),full.names = TRUE))
# Example data set
data("HexagonalFish", package = "sccm")
hf_pg <- sccm::polygon(HexagonalFish[, c("x", "y")])
Run Code Online (Sandbox Code Playgroud)
为了帮助说明这个问题,有一种C++方法可以确定一个点是否在多边形的内部.符号名称是_sccm_is_in_cpp和,如此处所示,已加载
is.loaded("_sccm_is_in_cpp")
# [1] TRUE
.Call("_sccm_is_in_cpp", PACKAGE = "sccm", 0.2, 0.4, hf_pg$vertices) # expect 0
## [1] 0
.Call("_sccm_is_in_cpp", PACKAGE = "sccm", 156, 178, hf_pg$vertices) # expect 1
## [1] 1
Run Code Online (Sandbox Code Playgroud)
导致错误的Fortran子程序之一是:scmap_.但是,符号已加载.
is.loaded("scmap_")
## [1] TRUE
# need values …Run Code Online (Sandbox Code Playgroud) 我有一个包含数百万个列表的列表,这些子列表具有一些不同的可能值,可能是10到100。
我想计算这些值的出现次数。
下面的代码可以工作,但是非常慢。我们可以做得更快吗?
count_by_list <- function(lst, var_nm = as.character(substitute(lst)), count_nm = "n"){
unique_lst <- unique(lst)
res <- tibble::tibble(!!var_nm := unique_lst, !!count_nm := NA)
for(i in seq_along(unique_lst)){
res[[count_nm]][[i]] <- sum(lst %in% res[[var_nm]][i])
}
res
}
x <- list(
list(a=1, b=2),
list(a=1, b=2),
list(b=3),
list(b=3, c=4))
count_by_list(x)
#> # A tibble: 3 x 2
#> x n
#> <list> <int>
#> 1 <named list [2]> 2
#> 2 <named list [1]> 1
#> 3 <named list [2]> 1
Run Code Online (Sandbox Code Playgroud)
由reprex软件包(v0.3.0)创建于2019-11-29
我尝试使用库进行哈希处理, …
我想在*n矩阵中创建具有相同值的k个块(k可以精确地按行号乘以列号乘以n*n):
例如,当n = 4且k = 4时,(k可以精确地除以4*4 = 16),矩阵就像这样创建:
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
Run Code Online (Sandbox Code Playgroud)
如果没有for循环,我怎么能这样做?
我很陌生Rcpp,RcppEigen可能这就是为什么我自己无法弄清楚的原因:
我只想编写一个包含 Eigen 库的 C++ 函数。为了测试它是否有效,我从http://people.math.aau.dk/~sorenh/misc/Rdocs/Rcpp/RcppSHLIB.pdf 中获取了以下示例:
#include <Rcpp.h>
#include <RcppEigen.h>
RcppExport SEXP C_spdinv_eigen ( SEXP X_ ){
using Eigen::Map;
using Eigen::MatrixXd;
typedef Eigen::Map<Eigen::MatrixXd> MapMatd;
const MapMatd X(Rcpp::as<MapMatd>(X_));
const MatrixXd Xinv(X.inverse());
return(Rcpp::wrap(Xinv));
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
rcpp-test.cpp:2:23: fatal error: RcppEigen.h: No such file or directory
compilation terminated.
make: *** [rcpp-test.o] Error 1
g++ -I/usr/share/R/include -DNDEBUG -I"/usr/local/lib/R/site-library/Rcpp/include" -fpic -O3 -pipe -g -c rcpp-test.cpp -o rcpp-test.o
Error in Rcpp::sourceCpp("rcpp-test.cpp") :
Error 1 occurred building shared library.
Run Code Online (Sandbox Code Playgroud)
编译一个只有 的脚本 …
我试图将字符向量(即字符串向量)从R传递到C/C++以进行排序和其他目的.使用Rcpp时,可以使用以下代码轻松完成:
#include <Rcpp.h>
#include <vector>
#include <string>
using namespace Rcpp;
// [[Rcpp::export]]
CharacterVector sort(CharacterVector x) {
std::sort(x.begin(), x.end());
return x;
}
Run Code Online (Sandbox Code Playgroud)
但是,由于这是我在这个软件包中唯一计划使用的C++,因此引入对Rcpp的依赖似乎不值得.没有它就做同样的事情并不容易.整数很容易:
#include <R.h>
#include <Rdefines.h>
#include <algorithm>
#include <string.h>
using namespace std;
SEXP sort(SEXP x) {
int* xx = INTEGER(x);
std::sort(xx, xx+LENGTH(x));
return(x);
}
Run Code Online (Sandbox Code Playgroud)
但没有std::vector<string>或char**相当于INTEGER().
如何在不向Rcpp引入依赖的情况下模拟相同的代码?
这里有一些问题讨论如何使用CHAR(STRING_ELT())转换单个字符串,但不清楚如何转换为字符串数组/向量.