小编Nic*_*bbe的帖子

透明等效于给定颜色

我已经有过几次了,所以这里是:我正在制作一些图表,其中包含一个参数估计值的曲线给定一个调整参数.

通常,我也为每个估计值都有SD,所以我可以在每个估计值周围显示误差条.

但是,我不喜欢错误栏,并且更喜欢它的一些平滑版本.这本身没问题(即我知道如何做到这一点).但是,我的情节包含几条相似的曲线,每条曲线都有自己的颜色.因此,我想将"平滑的错误区域"添加到每条曲线中,颜色与曲线本身的颜色相匹配.当然,我想透明地做到这一点,所以我仍然可以通过'错误区域'看到其他曲线.

所以,我的问题是:给定一种颜色(由数字,名称或rgb值指定---注意前两个会产生额外的问题,但这种情况经常发生,因为基本的绘图功能将这些作为有效颜色值),我怎样才能找到具有相同rgb但不同(给定)alpha级别(透明度)的匹配颜色.我想要一个像以下的功能:

makeTransparent<-function(someColor, alpha=100)
{
  newColor<-someColor + alpha #I wish
  return(newColor)
}
Run Code Online (Sandbox Code Playgroud)

这适用于以下事项:

makeTransparent(2)
makeTransparent("red")
makeTransparent(rgb(0,0,1))
Run Code Online (Sandbox Code Playgroud)

编辑当我想念一些明显的东西时,我讨厌它,但@themel指出了我(再次).这是一个完整的解决方案(注意:工作矢量化,因此您可以传递多种颜色;但此时仅支持一个alpha):

#note: always pass alpha on the 0-255 scale
makeTransparent<-function(someColor, alpha=100)
{
  newColor<-col2rgb(someColor)
  apply(newColor, 2, function(curcoldata){rgb(red=curcoldata[1], green=curcoldata[2],
    blue=curcoldata[3],alpha=alpha, maxColorValue=255)})
}
Run Code Online (Sandbox Code Playgroud)

r colors alpha-transparency

51
推荐指数
5
解决办法
7万
查看次数

Rcpp的基本文档

我想研究一下rcpp,以提高我的一些R代码的速度,而不必诉诸凌乱的C++代码(我已经取得了一些成功,但它看起来像是来自地狱的代码).

因此,我检查了Rcpp提供的文档,以及Dirk Eddelbuettel网站上提供的文档包.我安装并查看了RcppExamples,但是(至少从它的文档中)大多数都引用了RcppClassic?.除此之外,我做了一些谷歌搜索,但这并没有导致看起来像基本问题的答案.

  • Rcpp中的索引是从零开始还是从一开始工作
  • 名单同时提供了operator()operator[],但显然不是 operator[[]].目前尚不清楚哪些[][[]]R 相似.
  • 是否有任何支持Rcpp的因素(似乎没有)?

注意:事实上我从Rcpp-introduction.pdf的第一个例子中找到了一些答案,但这感觉就像运气.

此外,我stl非常生疏,所以如果有人能给我一个简单的例子,其中List的每个元素都是(例如)print-ed与stl风格的循环,那将是整洁的.

如果有人想因为没有找到这些信息而称我为白痴:继续前进,让你的一天.然后制作我的并指向我需要的文档:-)

作为对Eddelbuettel先生和其他Rcpp作者的建议(我希望他们中的一些人能够读到这一点):doxygen提供的类层次结构等,当你已经深入Rcpp时,它真的很整洁,但对于初学者来说(在Rcpp),我更感兴趣的是这个类中的这个方法的列表就像R中的那个函数一样,而不是'你可以在这个头文件中找到这个运算符的声明'.毕竟,我理解Rcpp的目标之一是降低在R中使用C++的门槛?注意:从我所看到和理解的内容来看,我非常重视Rcpp的实际代码,并对其创建者表示最高的敬意.如果缺乏基本文档仅仅是"缺乏资源"的结果,我愿意成为一种资源(例如:一旦我自己完成了"基本"文档的工作).

r rcpp

27
推荐指数
1
解决办法
1947
查看次数

使用"..."和"复制"

在文档中sapply,replicate有关于使用的警告...

现在,我可以接受它,但想了解它背后的原因.所以我创造了这个小小的人为例子:

innerfunction<-function(x, extrapar1=0, extrapar2=extrapar1)
{
    cat("x:", x, ", xp1:", extrapar1, ", xp2:", extrapar2, "\n")
}

middlefunction<-function(x,...)
{
    innerfunction(x,...)
}

outerfunction<-function(x, ...)
{
    cat("Run middle function:\n")
    replicate(2, middlefunction(x,...))
    cat("Run inner function:\n")
    replicate(2, innerfunction(x,...))
}

outerfunction(1,2,3)
outerfunction(1,extrapar1=2,3)
outerfunction(1,extrapar1=2,extrapar2=3)
Run Code Online (Sandbox Code Playgroud)

也许我已经做了一些明显可怕的错误,但我发现这个结果令人不安.所以任何人都可以向我解释为什么在上面的所有调用中outerfunction,我得到了这个输出:

Run middle function:
x: 1 , xp1: 0 , xp2: 0 
x: 1 , xp1: 0 , xp2: 0 
Run inner function:
x: 1 , xp1: 0 , xp2: 0 
x: 1 , xp1: 0 …
Run Code Online (Sandbox Code Playgroud)

r ellipsis replicate sapply

19
推荐指数
2
解决办法
6322
查看次数

"[.data.frame"的正文中的".1"

当我查看电脑上的内容时[[.data.frame,这就是我得到的:

> get("[[.data.frame")
function (x, ..., exact = TRUE) 
{
    na <- nargs() - (!missing(exact))
    if (!all(names(sys.call()) %in% c("", "exact"))) 
        warning("named arguments other than 'exact' are discouraged")
    if (na < 3L) 
        (function(x, i, exact) if (is.matrix(i)) 
            as.matrix(x)[[i]]
        else .subset2(x, i, exact = exact))(x, ..., exact = exact)
    else {
        col <- .subset2(x, ..2, exact = exact)
        i <- if (is.character(..1)) 
            pmatch(..1, row.names(x), duplicates.ok = TRUE)
        else ..1
        .subset2(col, i, exact = exact)
    }
}
<environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

我已经习惯了... …

r ellipsis dataframe

17
推荐指数
2
解决办法
693
查看次数

记录当前函数名称

我有一些自定义日志功能是扩展的cat.一个基本的例子是这样的:

catt<-function(..., file = "", sep = " ", fill = FALSE, labels = NULL,
    append = FALSE)
{
    cat(..., format(Sys.time(), "(%Y-%m-%d %H:%M:%S)"), "\n", file = file, 
        sep = sep, fill = fill, labels = labels, append = append)
}
Run Code Online (Sandbox Code Playgroud)

现在,我使用(自制)函数进行了大量工作,并使用其中一些logfuntions来查看进度,这非常有效.但是,我注意到,我几乎总是使用这样的函数:

somefunc<-function(blabla)
{
  catt("somefunc: start")
  #do some very useful stuff here
  catt("somefunc: some time later")
  #even more useful stuff
  catt("somefunc: the end")
}
Run Code Online (Sandbox Code Playgroud)

注意每个调用如何catt从调用它的函数的名称开始.非常整洁,直到我开始重构我的代码并重命名函数等.

感谢Brian Ripley的一些旧的R-list帖子,如果我没弄错的话,我发现这段代码可以获得'当前的函数名':

catw<-function(..., file = "", sep = " ", fill = …
Run Code Online (Sandbox Code Playgroud)

logging r function

16
推荐指数
1
解决办法
2250
查看次数

反面的

我错过了一些明显的东西吗?看起来which基数R中缺少反函数(谷歌搜索,甚至搜索SO的"R反向",它返回无数不相关的链接)?

好吧,并不是说我不能写一个,而只是为了减轻我对它的失望和作为一个R-肌肉屈曲挑战的挫折:你将如何写一个?

我们需要的是一个像以下的功能:

invwhich<-function(indices, totlength)
Run Code Online (Sandbox Code Playgroud)

返回一个长度为逻辑的向量,totlength其中每个元素indices都是TRUE,其余元素是FALSE.

必然会有很多方法来实现这一点(其中一些方法确实很低调),因此争论为什么你的解决方案是"最好的".Oneliner有人吗?

如果它考虑到which(arr.ind??)的一些其他参数,那显然更好......

r which

12
推荐指数
2
解决办法
2636
查看次数

rbind.data.frame的性能

我有一个数据框列表,我确信它们都至少包含一行(事实上,有些行只包含一行,其他行包含给定数量的行),并且它们都具有相同的列(名称和类型).如果重要的话,我也确定行中的任何地方都没有NA.

情况可以像这样模拟:

#create one row
onerowdfr<-do.call(data.frame, c(list(), rnorm(100) , lapply(sample(letters[1:2], 100, replace=TRUE), function(x){factor(x, levels=letters[1:2])})))
colnames(onerowdfr)<-c(paste("cnt", 1:100, sep=""), paste("cat", 1:100, sep=""))
#reuse it in a list
someParts<-lapply(rbinom(200, 1, 14/200)*6+1, function(reps){onerowdfr[rep(1, reps),]})
Run Code Online (Sandbox Code Playgroud)

我已设置参数(随机化),以便它们接近我的真实情况.

现在,我想在一个数据帧中统一所有这些数据帧.我认为使用rbind可以做到这一点,就像这样:

system.time(
result<-do.call(rbind, someParts)
)
Run Code Online (Sandbox Code Playgroud)

现在,在我的系统上(这不是特别慢),并且使用上面的设置,这需要system.time的输出:

   user  system elapsed 
   5.61    0.00    5.62
Run Code Online (Sandbox Code Playgroud)

rbind-ing 254(在我的情况下)200行变量的行近6秒?当然必须有一种方法来改善这里的表现?在我的代码中,我必须经常做类似的事情(这是来自多个插补),所以我需要尽可能快.

performance r dataframe rbind

8
推荐指数
3
解决办法
4249
查看次数

S3和班级顺序

我总是无法理解有关如何调用S3方法的文档,而这次它正在咬我.

我会在前面道歉,提出不止一个问题,但他们都是密切相关的.在一系列复杂功能的核心深处,我创造了许多glmnet契合,特别是后勤功能.现在,glmnet文档指定其返回值以使类"glmnet"和(对于逻辑回归)"lognet".实际上,这些是按此顺序指定的.

但是,看看执行结束glmnet后,调用(内部函数)之后的righter lognet,将类设置fit为"lognet",我在返回(变量fit)之前看到这行代码:

class(fit) = c(class(fit), "glmnet")
Run Code Online (Sandbox Code Playgroud)

由此,我得出结论,类的顺序实际上是"lognet","glmnet".

不幸的是,我曾经拥有过(就像文档建议的那样):

> class(myfit)
[1] "glmnet" "lognet"
Run Code Online (Sandbox Code Playgroud)

这方面的问题是特别是为它调度S3方法的方式predict.这是以下代码predict.lognet:

function (object, newx, s = NULL, type = c("link", "response", 
    "coefficients", "class", "nonzero"), exact = FALSE, offset, 
    ...) 
{
    type = match.arg(type)
    nfit = NextMethod("predict") #<- supposed to call predict.glmnet, I think
    switch(type, response = {
        pp = exp(-nfit)
        1/(1 + pp)
    }, class = ifelse(nfit > 0, 2, …
Run Code Online (Sandbox Code Playgroud)

r glmnet

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

为什么不存在的data.frame列中的项目分配有效?

灵感来自Q6437164:有人可以向我解释为什么以下工作:

iriscopy<-iris #or whatever other data.frame
iriscopy$someNonExistantColumn[1]<-15
Run Code Online (Sandbox Code Playgroud)

对我而言,似乎并不明白R如何将此语句解释为:someNonExistantColumn在data.frame中创建一个名为new的新列,并将第一个值(实际上是所有值,如图所示)设置为值15.

r

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

查找多维结构中的位置列表(数组)

假设我有一个简单的多维结构,就像这样:

somestr<-array(sample.int(2, 120, replace=TRUE), dim=c(4,5,6))
Run Code Online (Sandbox Code Playgroud)

我正在寻找结构中的所有位置(在这种情况下,数组),其中值等于,例如,对于我的示例,2.请注意,结构可能同样包含字符或逻辑.现在,它只是找到所有与给定值相等的值,但将这个想法扩展到可以应用于结构中每个项目的任何逻辑值函数(这将允许例如is.na使用)将是很好的..

我想得到的是一个(integer)矩阵,其列数与somestr维数一样多(在本例中为3),以及多行(取决于上面的sample.int调用),因为有等于给定值的值( 2).此新矩阵somestr中的值是值等于2 的"坐标" .

我为将我的例子与解释混在一起道歉,但我希望这样更清楚.为了记录:我能够自己制作这个(甚至可以回答我自己的问题),但我希望有一个标准化的解决方案(阅读:在一些软件包中的现成功能),或者沿途学习新的技巧.

那么,总之,你能写一个函数吗?

posOf<-function(somestr, valueToCompareTo)
Run Code Online (Sandbox Code Playgroud)

返回somestr等于的位置矩阵valueToCompareTo,如果valueToCompareTo是函数,则somestr返回应用此函数返回的位置TRUE.

position r multidimensional-array

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