这可能是一个非常简单的问题,但我无法真正找到它.如何在Rcpp中采样1到N之间的随机整数?我知道我可以对一个统一的数字进行采样并对其进行舍入,或者包含sample
在C++代码中使用的函数,但两者似乎都不是正确的方法.
该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
逻辑回归?
我最近从一台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)
实际上很清楚,我知道我犯了一个错误的错误:)
由于昨晚我一直在尝试Rcpp
和inline
,到目前为止,我真的很喜欢它.但是我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++ …
在R中有没有办法简单地搜索谷歌的东西,然后返回结果的数量?我在谷歌的一些服务(RGoogleDocs,RGoogleData,RGoogleMaps,googleVis)周围看过很多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多行数据帧.请告诉我怎么样?!
我正在研究是否可以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) 我经常喜欢在IDE中使用深色背景colortheme上的浅色文本.当我在R中绘制某些内容时,绘图的默认颜色方案是白色背景上的黑色文本/边框/点.我试图默认更改此项,最好是默认情况下从R调用的特定设备(X11cairo
,RStudioGD
),同时保持"输出"设备的正常默认值,例如pdf
和png
.
我的问题有两个:(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的默认设备.
我正在编写一个R包,您可以在其中创建网络并以不同的文件类型输出它们.我找到了包SVGRTipsDevice,它可用于创建包含工具提示和超链接的SVG图片,我非常喜欢.我把它作为输出选项之一包含在我的包中,使其不是我的包的一个重要部分,但它仍然是它的一部分(我想保留一部分).
现在的问题是,该软件包仅适用于32位用户.因为我的软件包依赖于它,64位用户无法安装它.似乎我要么必须使我的软件包仅限32位,要么删除SVG功能(目前我选择后者上传到CRAN,链接到我网站上的完整软件包).
有没有办法以不同的方式做到这一点?就像让任何人都可以安装软件包一样,但只为32位用户提供SVG功能?
我正在准备三个R包,很快就会上传到相互依赖的CRAN.具体来说,软件包A
已经在CRAN上并且要更新,软件包B
是独立的,软件包C
依赖于最新版本的A
和B
.
我可以在没有检查问题的情况下通过首先上传A
并在几天后C
上传来完成B
此操作.但是,我想立即在帮助页面中添加交叉引用,并将所有包添加到彼此的建议列表中.此外,由于我将进一步开发这三个,我希望将来能够同时更新它们.
那么,这里的问题是,是否可以同时向CRAN上传多个相互依赖的包?我怎么能这样做?