小编Sac*_*amp的帖子

在Rcpp中采样随机整数

这可能是一个非常简单的问题,但我无法真正找到它.如何在Rcpp中采样1到N之间的随机整数?我知道我可以对一个统一的数字进行采样并对其进行舍入,或者包含sample在C++代码中使用的函数,但两者似乎都不是正确的方法.

r rcpp

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

glmnet如何计算最大lambda值?

glmnet软件包使用从最大值缩放的一系列LASSO调整参数lambda,lambda_max在这些参数下没有选择预测变量.我想知道如何glmnet计算这个lambda_max值.例如,在一个简单的数据集中:

set.seed(1)
library("glmnet")
x <- matrix(rnorm(100*20),100,20)
y <- rnorm(100)
fitGLM <- glmnet(x,y)
max(fitGLM$lambda)
# 0.1975946
Run Code Online (Sandbox Code Playgroud)

包装插图(http://www.jstatsoft.org/v33/i01/paper)在2.5节中描述了它计算此值如下:

sx <- as.matrix(scale(x))
sy <- as.vector(scale(y))
max(abs(colSums(sx*sy)))/100
# 0.1865232
Run Code Online (Sandbox Code Playgroud)

这显然是接近但不是相同的价值.那么,是什么导致了这种差异?在一个相关的问题中,我如何计算lambda_max逻辑回归?

r lasso-regression glmnet

8
推荐指数
2
解决办法
4045
查看次数

使用dyn.load在R x64中加载编译的c代码时出现问题

我最近从一台32位笔记本电脑转到64位台式机(均为win7).我刚刚发现在加载dll时使用时出现错误dyn.load.我想这是一个简单的错误,我忽略了一些事情.

例如,我写了这个简单的c函数(foo.c):

void foo( int *x) {*x = *x + 1;}
Run Code Online (Sandbox Code Playgroud)

然后在命令提示符下编译它:

R CMD SHLIB foo.c
Run Code Online (Sandbox Code Playgroud)

然后在32位RI可以在R中使用它:

> dyn.load("foo.dll")
> .C("foo",as.integer(1))
[[1]]
[1] 2
Run Code Online (Sandbox Code Playgroud)

但在64位RI获得:

> dyn.load("foo.dll")
Error in inDL(x, as.logical(local), as.logical(now), ...) : 
  unable to load shared object 'C:/Users/Sacha/Documents/R/foo.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.
nd.
Run Code Online (Sandbox Code Playgroud)

编辑:

作为参考,可以使用以下方法强制在架构中强制使用R CMD --arch 64x:

R --arch x64 CMD SHLIB foo.c
Run Code Online (Sandbox Code Playgroud)

实际上很清楚,我知道我犯了一个错误的错误:)

c dll r

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

找到Rcpp中的最小向量

由于昨晚我一直在尝试Rcppinline,到目前为止,我真的很喜欢它.但是我C一般都是新手,只能做基本的东西,而且我很难在网上寻找有关功能等方面的帮助.

我正在研究的是一个在全局环境中找到矢量最小值的函数.我提出了:

library("inline")
library("Rcpp")

foo <- rnorm(100)

bar <- cxxfunction( signature(),
'
Environment e = Environment::global_env();  
NumericVector foo = e["foo"];
int min;

for (int i = 0; i < foo.size(); i++)
{
    if ( foo[i] < foo[min] ) min = i;
}
return wrap(min+1);
', plugin = "Rcpp")

bar()
Run Code Online (Sandbox Code Playgroud)

但似乎应该有一种更简单的方法来做到这一点,而且速度要慢得多 which.max()

system.time(replicate(100000,bar()))
   user  system elapsed 
   0.27    0.00    0.26 
system.time(replicate(100000,which.min(foo)))
   user  system elapsed 
    0.2     0.0     0.2 
Run Code Online (Sandbox Code Playgroud)

我俯瞰一个基本的c++Rcpp执行此功能?如果是这样,我在哪里可以找到这样的功能列表?

我想这个问题与以下内容有关: 我在哪里可以学习如何编写C代码来加速慢速R函数?

但在不同的我不是真正感兴趣的是如何纳入c++ …

c++ r rcpp

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

R:搜索谷歌搜索字符串并返回点击数

在R中有没有办法简单地搜索谷歌的东西,然后返回结果的数量?我在谷歌的一些服务(RGoogleDocs,RGoogleData,RGoogleMaps,googleVis)周围看过很多R套餐,但我无法在任何地方找到这个功能.

r

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

R中的随机行选择

我有这个数据帧

id <- c(1,1,1,2,2,3)
name <- c("A","A","A","B","B","C")
value <- c(7:12)
df<- data.frame(id=id, name=name, value=value)
df
Run Code Online (Sandbox Code Playgroud)

此函数从中选择一个随机行:

randomRows = function(df,n){
  return(df[sample(nrow(df),n),])
}
Run Code Online (Sandbox Code Playgroud)

randomRows(df,1)
Run Code Online (Sandbox Code Playgroud)

但我想随机选择每个'name'一行(或每个'id'是相同的)并将整行连接成一个新表,所以在这种情况下,三行.这必须遍历2000多行数据帧.请告诉我怎么样?!

r

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

评估Rcpp环境中的表达式

我正在研究是否可以with()在Rcpp中为环境提供与R中相同的功能.

例如,在RI中可以创建一个环境,添加两个变量并使用with()仅使用变量名来计算表达式:

e <- new.env()
e$x <- 1
e$y <- 2

with(e,
     x + y
     )
Run Code Online (Sandbox Code Playgroud)

我可以在Rcpp中做类似的事情,但它需要索引环境:

f <- cxxfunction(signature(env="environment"), '
Environment e(env);
double Res = (double)e["x"] + (double)e["y"];
return(wrap( Res ));

', plugin = "Rcpp" )

f(e)
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用Rcpp中的变量名来计算表达式?我问的原因是因为我想编写一种动态C++函数,你可以在其中添加表达式.例如,某些虚拟代码不起作用:

f <- cxxfunction(signature(env="environment"), sprintf('
Environment e(env);
double Res;
// Res = with(e, %s );
return(wrap( Res ));
','x + y'), plugin = "Rcpp" )
Run Code Online (Sandbox Code Playgroud)

r rcpp

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

设置设备的默认图形参数

我经常喜欢在IDE中使用深色背景colortheme上的浅色文本.当我在R中绘制某些内容时,绘图的默认颜色方案是白色背景上的黑色文本/边框/点.我试图默认更改此项,最好是默认情况下从R调用的特定设备(X11cairo,RStudioGD),同时保持"输出"设备的正常默认值,例如pdfpng.

我的问题有两个:(1)如何设置默认图形参数?(2)我可以仅针对特定设备执行此操作吗?

例如,我可以轻松地在当前设备中设置colorscheme par:

par(
  bg = "black",
  col = "white",
  col.axis = "white",
  col.lab = "white",
  col.main = "white",
  col.sub = "white")

plot(1)
Run Code Online (Sandbox Code Playgroud)

按预期在黑色图上创建白色,并按预期重置设备返回默认值:

dev.off()
plot(1)
Run Code Online (Sandbox Code Playgroud)

我尝试将以下内容放入我的.Rprofile:

graphics:::par(
  bg = "black",
  col = "white",
  col.axis = "white",
  col.lab = "white",
  col.main = "white",
  col.sub = "white")
graphics:::plot(1,type="n",xlab="",ylab="",axes=FALSE)
graphics:::text(1,1,"Plotting area")
Run Code Online (Sandbox Code Playgroud)

这在某种程度上有效,除了它在启动时打开一个绘图窗口,这可能是令人讨厌的,在RStudio中它不会打开RStudio设备而是打开一个x11窗口.此外,如果我关闭该窗口,参数将再次重置.我希望每次打开一个绘图窗口时默认使用这个"colorscheme",例如RStudio的默认设备.

graphics r

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

编写每个架构不同的R包

我正在编写一个R包,您可以在其中创建网络并以不同的文件类型输出它们.我找到了包SVGRTipsDevice,它可用于创建包含工具提示和超链接的SVG图片,我非常喜欢.我把它作为输出选项之一包含在我的包中,使其不是我的包的一个重要部分,但它仍然是它的一部分(我想保留一部分).

现在的问题是,该软件包仅适用于32位用户.因为我的软件包依赖于它,64位用户无法安装它.似乎我要么必须使我的软件包仅限32位,要么删除SVG功能(目前我选择后者上传到CRAN,链接到我网站上的完整软件包).

有没有办法以不同的方式做到这一点?就像让任何人都可以安装软件包一样,但只为32位用户提供SVG功能?

r 32bit-64bit

5
推荐指数
2
解决办法
577
查看次数

将多个相互依赖的包上载到CRAN

我正在准备三个R包,很快就会上传到相互依赖的CRAN.具体来说,软件包A已经在CRAN上并且要更新,软件包B是独立的,软件包C依赖于最新版本的AB.

我可以在没有检查问题的情况下通过首先上传A并在几天后C上传来完成B此操作.但是,我想立即在帮助页面中添加交叉引用,并将所有包添加到彼此的建议列表中.此外,由于我将进一步开发这三个,我希望将来能够同时更新它们.

那么,这里的问题是,是否可以同时向CRAN上传多个相互依赖的包?我怎么能这样做?

r package cran

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

标签 统计

r ×10

rcpp ×3

32bit-64bit ×1

c ×1

c++ ×1

cran ×1

dll ×1

glmnet ×1

graphics ×1

lasso-regression ×1

package ×1