我想知道a!=0比!a==0使用R包microbenchmark 快多少.这是代码(如果你的电脑很慢,减少3e6和100):
library("microbenchmark")
a <- sample(0:1, size=3e6, replace=TRUE)
speed <- microbenchmark(a != 0, ! a == 0, times=100)
boxplot(speed, notch=TRUE, unit="ms", log=F)
Run Code Online (Sandbox Code Playgroud)
每次,我得到一个类似下面的情节.正如所料,第一个版本比第二个版本(33毫秒)更快(中位数为26毫秒).
但这几个非常高的值(异常值)来自哪里呢?是一些内存管理效果?如果我将时间设置为10,则没有异常值......
编辑:sessionInfo():R版本3.1.2(2014-10-31)平台:x86_64-w64-mingw32/x64(64位)

有utils::news(package="mypack")打开新闻文件。
是否还有打开 R 包的 README.md 文件的命令?
par(fig)使用原始参数设置图形参数并重置它们后,不会写入图表边距中的文本.只有在另一个低水平命令内进行绘图区域将再次工作.这是一个例子:
dev.off()
plot(1:10)
op <- par(no.readonly = TRUE)
mtext("hello", adj=1, col=2) # written as expected
par(fig=c(0.1,0.6,0.5,0.8), new=TRUE)
par(op)
mtext("hello ", adj=1, col=3) # not written
mtext("hello ", adj=1, col=3, line=-1) # works inside plot region
mtext("hello ", adj=1, col=3) # still not written
text(50,20,"") # or abline # do something inside plot region
mtext("hello ", adj=1, col=3) # now it works!
Run Code Online (Sandbox Code Playgroud)
这可能与我在par(图)之后发布的另一个问题有关,mtext略有偏离.
此外mtext,axis也行不通.此外text/abline/points,title(main="dummy")还解决了这个问题.
这可能是一个R bug吗?或者我错过了什么?
在检查包矢量是否需要安装时,我遇到了一个有趣的错误.请求和卸载lme4命名空间会在第二次执行时出错,但仅在按特定顺序检查某些其他包时才会出错.
isInstalled <- function(package) # is a package installed and usable?
{
loaded <- package %in% .packages()
out <- requireNamespace(package, quietly=F)
if(!loaded) try(unloadNamespace(package), silent=F)
out
}
isInstalled("car") # All return TRUE
isInstalled("nnet")
isInstalled("pbkrtest")
isInstalled("lme4")
isInstalled("nloptr")
isInstalled("lme4") # FALSE (only after commands above)
# no such symbol NLoptR_Optimize in package C:/__Rlibrary/nloptr/libs/x64/nloptr.dll
library(nloptr) # now fails, too
# Problem solved if nnet is checked before car (but not again after car)
Run Code Online (Sandbox Code Playgroud)
我做错了isInstalled吗?
#install.packages(c("miniCRAN","igraph"))
d <- miniCRAN::makeDepGraph(c("car", "nnet", …Run Code Online (Sandbox Code Playgroud) 我有一个在其父环境中获取脚本的函数。以下内容按预期工作:
cat("aa <- 77", file="script.R")
runScript <- function() source("script.R", local=parent.frame())
env <- new.env()
evalq(runScript(), envir=env)
ls.str(envir=env) # as expected: aa in env, not in globalEnv
rm(env)
Run Code Online (Sandbox Code Playgroud)
当我将其包装在函数中时,环境似乎被忽略:
thisfails <- function(expr){
env <- new.env()
evalq(expr, envir=env)
ls(envir=env)
}
thisfails(runScript()) # why is aa in globalEnv?
rm(aa)
Run Code Online (Sandbox Code Playgroud)
现在我可以用 来理解这一点eval,但不能用 来理解evalq,正如手册所说:eval 在将其传递给求值器之前评估当前作用域中的第一个参数: evalq 避免了这种情况。
有趣的是,这有效:
works <- function(){
runScript()
ls()
}
works() # as expected: returns aa, doesn't create it in globalEnv
Run Code Online (Sandbox Code Playgroud)
如何在函数内使用 runScript 作为表达式并避免在 globalEnv 中对其求值?