下载Rcpp软件包时出现此错误:
> install.packages("Rcpp", dependencies=TRUE)
Installing package(s) into ‘/home/me/src/Rlibs’ (as ‘lib’ is unspecified)
trying URL 'http://cran.us.r-project.org/src/contrib/Rcpp_0.10.2.tar.gz'
Content type 'application/x-gzip' length 2380089 bytes (2.3 Mb)
...
Warning in dir.create(lockdir, recursive = TRUE) :
cannot create dir '/home', reason 'Permission denied'
ERROR: failed to create lock directory ‘/home/me/src/Rlibs/00LOCK-Rcpp’
...
Run Code Online (Sandbox Code Playgroud)
由于我的机器在计算机集群上,我在不同的节点上尝试过,我小心翼翼地删除了/ tmp中下载的临时文件.奇怪的是我有权写入/ home/me/src/Rlibs /.所以我的问题是:
> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: x86_64-redhat-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C …Run Code Online (Sandbox Code Playgroud) 正如这里所解释的那样gridBase,即使两个图都使用R的基本图形系统,也可以很容易地将图形嵌入到现有图中.但是,当将整个图形保存为pdf时,第一页始终为空白.怎么预防这个?
这是一个例子:
require(gridBase)
## generate dummy data
set.seed(1859)
x <- 1:100
y <- x + rnorm(100, sd=5)
ols <- lm(y ~ x)
pdf("test.pdf")
## draw the first plot
plot.new() # blank page also happens when using grid.newpage()
pushViewport(viewport())
plot(x, y)
## draw the second plot, embedded into the first one
pushViewport(viewport(x=.75,y=.35,width=.2,height=.2,just=c("center","center")))
par(plt=gridPLT(), new=TRUE)
hist(ols$residuals, main="", xlab="", ylab="")
popViewport(2)
dev.off()
Run Code Online (Sandbox Code Playgroud) 这是我目前的代码:
my.function <- function( my.arg="" ){
if(my.arg == "")
my.arg <- rnorm(10)
return( mean(my.arg) )
}
Run Code Online (Sandbox Code Playgroud)
它告诉我这个:
> my.function( rbinom(10, 100, 0.2) )
[1] 18.5
Warning message:
In if (a == "") a <- rnorm(10) :
the condition has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)
我尝试过my.arg=c(),或者my.arg=0,但我总是得到警告或错误.R手册在这个问题上没有说太多.
任何的想法?提前致谢!
我的程序操纵整数的STL向量,但有时,我需要计算一些统计数据.因此我使用GSL功能.为了避免将STL向量复制到GSL向量中,我创建了一个GSL向量视图,并将其提供给GSL函数,如下面这段代码:
#include <iostream>
#include <vector>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_statistics.h>
using namespace std;
int main( int argc, char* argv[] )
{
vector<int> stl_v;
for( int i=0; i<5; ++i )
stl_v.push_back( i );
gsl_vector_int_const_view gsl_v = gsl_vector_int_const_view_array( &stl_v[0], stl_v.size() );
for( int i=0; i<stl_v.size(); ++i )
cout << "gsl_v_" << i << "=" << gsl_vector_int_get( &gsl_v.vector, i ) << endl;
cout << "mean=" << gsl_stats_mean( (double*) gsl_v.vector.data, 1, stl_v.size() ) << endl;
}
Run Code Online (Sandbox Code Playgroud)
编译完成后(gcc -lstdc ++ …
根据手册,Filter适用于矢量,它也适用于列表,例如:
z <- list(a=1, b=2, c=3)
Filter(function(i){
z[[i]] > 1
}, z)
$b
[1] 2
$c
[1] 3
Run Code Online (Sandbox Code Playgroud)
但是,它不适用于列表列表,例如:
z <- list(z1=list(a=1,b=2,c=3), z2=list(a=1,b=1,c=1), z3=list())
Filter(function(i){
if(length(z[[i]])>0){
if(z[[i]]$b > 1)
TRUE
else
FALSE
}
else
FALSE
}, z)
Error in z[[i]] : invalid subscript type 'list'
Run Code Online (Sandbox Code Playgroud)
在不使用嵌套循环的情况下过滤列表列表的最佳方法是什么?它也可以是列表清单......
(我尝试使用嵌套lapply,但无法使其工作.)
编辑:在第二个例子中,这是我想要获得的:
list(z1=list(a=1,b=2,c=3))
Run Code Online (Sandbox Code Playgroud)
也就是说,没有z $ z2,因为z $ z2 $ b <1,没有z $ z3,因为它是空的.
我正在学习如何开发R包.一切顺利,感谢R手册和RUnit的这个维基.更确切地说,当我在一个新的R控制台中启动我的单元测试时,所有测试都成功完成:
#rm(list=ls())
library(RUnit)
testSuite <- defineTestSuite("current", "~/src/mypkg/inst/unitTests/")
isValidTestSuite # returns TRUE
runTestSuite(testSuite) # returns Number of errors: 0 and Number of failures: 0
Run Code Online (Sandbox Code Playgroud)
但是,当我在终端中启动它们时,我收到一个错误(该函数使用我在"〜/ src/Rlibs"中安装的包GenomicRanges):
$ make test R_LIBS="~/src/Rlibs/"
...
ERROR in test.MyFunction: Error in match(x, table, nomatch = 0L) :
'match' requires vector arguments
Run Code Online (Sandbox Code Playgroud)
我没有看到导致此错误的原因.我想你需要更多关于代码和测试的信息,但这并不容易,因为我不知道如何在一个小例子上复制这个错误而不为此创建一个新包.也许你们中的一些人会对这个错误信息有所了解并给我一些提示?
编辑:帮助别人给我一个关于错误的提示,这是我为虚拟包编写的代码.目的是找出"g"项中包含哪些"p"项.
这是测试:
test.MyFunction <- function(){
g <- list(c1=data.frame(name=c("g1","g2"), start=c(11,1111),
end=c(500,1500), strand=c("+","+"), stringsAsFactors=FALSE))
p <- list(c1=data.frame(name=c("p1","p2"), strand=c("+","-"),
start=c(11,601), end=c(20, 610), stringsAsFactors=FALSE))
exp <- list(c1=list(g1=c("p1"))) # item "p1" is included in …Run Code Online (Sandbox Code Playgroud) 在C++程序中,我想要一个带有必需参数的"long-only"选项.下面是我使用getopt_long()的最小例子,但它不起作用:
#include <getopt.h>
#include <cstdlib>
#include <iostream>
using namespace std;
void help (char ** argv)
{
cout << "`" << argv[0] << "` experiments with long options." << endl;
}
void parse_args (int argc, char ** argv, int & verbose, int & param)
{
int c = 0;
while (1)
{
static struct option long_options[] =
{
{"help", no_argument, 0, 'h'},
{"verbose", required_argument, 0, 'v'},
{"param", required_argument, 0, 0}
};
int option_index = 0;
c = getopt_long (argc, …Run Code Online (Sandbox Code Playgroud) 我在我的C++包中使用Autotools.我的包有一个二进制文件,例如名为"myprog".我写了一个bash脚本,"test.bash",其中包含一个功能测试.该脚本有4个步骤:(1)创建输入文件,(2)生成预期输出文件,(3)在输入文件上启动"myprog",(4)将"prog"的输出与预期输出进行比较.
在步骤3中,"test.bash"需要知道"myprog"的路径.如果我自己在独立版本上启动"test.bash",我可以在命令行中将"myprog"的路径作为选项.但是,可以使用当我make check还是make distcheck?
我正在阅读Autotools/Automake的手册.我想通过使用变量设置有一种方法configure,但我不知道如何使用它们,所以任何解决方案都非常受欢迎!