相关疑难解决方法(0)

Rcpp通过引用传递而不是通过值传递

我第一次尝试了Rcpp功能inline,它解决了我的速度问题(感谢Dirk!): R:将负值替换为零

初始版本看起来像这样:

library(inline)
cpp_if_src <- '
  Rcpp::NumericVector xa(a);
  int n_xa = xa.size();
  for(int i=0; i < n_xa; i++) {
    if(xa[i]<0) xa[i] = 0;
  }
  return xa;
'
cpp_if <- cxxfunction(signature(a="numeric"), cpp_if_src, plugin="Rcpp")
Run Code Online (Sandbox Code Playgroud)

但是当被调用时cpp_if(p),它会p用输出覆盖,这不是预期的.所以我认为它是通过引用传递的.

所以我用以下版本修复它:

library(inline)
cpp_if_src <- '
  Rcpp::NumericVector xa(a);
  int n_xa = xa.size();
  Rcpp::NumericVector xr(a);
  for(int i=0; i < n_xa; i++) {
    if(xr[i]<0) xr[i] = 0;
  }
  return xr;
'
cpp_if <- cxxfunction(signature(a="numeric"), cpp_if_src, plugin="Rcpp")
Run Code Online (Sandbox Code Playgroud)

这似乎有效.但是现在,当我将其重新加载到R中时,原始版本不再覆盖其输入(即,相同的确切代码现在不会覆盖其输入):

> cpp_if_src <- '
+   Rcpp::NumericVector …
Run Code Online (Sandbox Code Playgroud)

r rcpp

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

为什么setDT在这种情况下没有任何影响?

请考虑以下代码

library(data.table) # 1.9.2
x <- data.frame(letters[1:2]) 
setDT(x) 
class(x)
## [1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)

这是预期的结果.现在,如果我跑

x <- letters[1:2]
setDT(data.frame(x)) 
class(x) 
## [1] "character"
Run Code Online (Sandbox Code Playgroud)

由于某种原因class,它x保持不变.

一种可能性是setDT只更改全局环境中的对象类,所以我尝试过

x <- data.frame(letters[1:2]) 
ftest <- function(x) setDT(x) 
ftest(x) 
class(x) 
##[1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)

似乎setDT不太关心对象的环境以便改变它的类.

是什么导致了上述行为?它只是一个错误或背后有一些常识吗?

r data.table

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

R data.table:将向量转换为一行data.table

我有一个字符向量x,我想以快速的方式变成一行data.table.该命令data.table(x)返回一列data.table.现在,data.table(t(x))完成工作,但我想知道是否有更快的方法.

optimization r data.table

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

R中列表的逻辑操作

我有一些R,例如:

x<-c(-3,1,-5,7,-10)
y<-c(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

我想在某些条件下检查x的元素,即<0,如果为true,则根据它操纵y.

例如,如果我的逻辑检查是x <0,那么y的元素[0],[2],[4]将被修改,即:

print(y)
y=[0,2,0,3,0]
Run Code Online (Sandbox Code Playgroud)

我已经google了一下,无法找到任何符合元素的东西.我确信这是谷歌的失败,但非常感谢.

r

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

标签 统计

r ×4

data.table ×2

optimization ×1

rcpp ×1