小编Ben*_*ker的帖子

"预测"函数的逆

使用predict()一个可以获得对于给定模型y的自变量(x)的特定值的因变量()的预测值.是否有任何预测x给定的函数y

例如:

kalythos <- data.frame(x = c(20,35,45,55,70), 
    n = rep(50,5), y = c(6,17,26,37,44))
kalythos$Ymat <- cbind(kalythos$y, kalythos$n - kalythos$y)
model <- glm(Ymat ~ x, family = binomial, data = kalythos)
Run Code Online (Sandbox Code Playgroud)

如果我们想知道模型的预测值x=50:

predict(model, data.frame(x=50), type = "response")
Run Code Online (Sandbox Code Playgroud)

例如,我想知道哪个xy=30.

r

9
推荐指数
2
解决办法
5510
查看次数

从截断的正态分布生成有效的随机数

我想从正态分布中采样50,000个值,其中mean = 0和sd -1.但我想将值限制为[-3,3].我已编写代码来执行此操作,但不确定它是否最有效?希望得到一些建议.

lower <- -3 
upper <- 3
x_norm<-rnorm(75000,0,1)
x_norm<-x_norm[which(x_norm >=lower & x_norm<=upper)]
repeat{
    x_norm<-c(x_norm, rnorm(10000,0,1))
    x_norm<-x_norm[which(x_norm >=lower & x_norm<=upper)]
    if(length(x_norm) >= 50000){break}
}
x_norm<-x_norm[1:50000]
Run Code Online (Sandbox Code Playgroud)

r random-sample

9
推荐指数
3
解决办法
4416
查看次数

提高Rcpp浮点输出的精度

我试图在Rcpp函数的双精度输出中打印更多数字,但无法弄清楚如何...我看过如何使用cout以完全精度打印双值?通用C++答案的其他地方,但我看不出怎么做Rcpp,除了使用printf,我认为是最后的手段......

require(inline)
code <- '
    double x=1.0;
    std::cout.precision(10); // compiles but does nothing
    Rcpp::Rcout.precision(10); // compiles but does nothing
    printf("(1) %1.10lf\\n",x);  // works but bad practice
    Rcpp::Rcout << "(2) " << x << std::endl;
    Rcpp::Rcout << "(3) " << std::setprecision(10) << x << std::endl;
    return Rcpp::wrap(0);
'
fun <- rcpp(sig=c(v=0),body=code,includes="#include <iomanip>")
fun(1)
## (1) 1.0000000000
## (2) 1
## (3) 1
## [1] 0
Run Code Online (Sandbox Code Playgroud)

r rcpp

9
推荐指数
2
解决办法
899
查看次数

使用knitr :: rmarkdown_notangle进行非评估的晕影

knitr软件包最近添加了新的notangle晕影引擎,例如knitr::rmarkdown_notangle,允许禁用晕影块的评估.这里knitr描述用于小插曲的一般过程,而具体notangle功能在该问题的答案中描述.

我的问题是我不能让这个工作.我可以通过在目录中R CMD build包含.html输出来传递它vignettes(我也放了一个副本inst/doc),但R CMD check除非我指定--no-build-vignettes,否则我无法通过它,或者除非我将rmarkdown_notangle引擎更改回来rmarkdown.

我已经构建了一个简单的包,其中包含以下插图(in vignettes/notangle.rmd):它可以在这里找到.

<!--
%\VignetteEngine{knitr::rmarkdown_notangle}
%\VignetteIndexEntry{Supplementary Materials}
-->
A silly little vignette.

```{r}
2+2
```
Run Code Online (Sandbox Code Playgroud)

我的DESCRIPTION文件包括

Suggests:
    knitr,
VignetteBuilder: knitr
BuildVignettes: yes
Run Code Online (Sandbox Code Playgroud)

当我试着奔跑时,R CMD check我得到了

* checking re-building of vignette outputs ... NOTE
Error in re-building vignettes: …
Run Code Online (Sandbox Code Playgroud)

r knitr

9
推荐指数
1
解决办法
298
查看次数

`fill`比例未显示在图例中

这是我的虚拟代码:

set.seed(1)
df <- data.frame(xx=sample(10,6), 
                 yy=sample(10,6), 
                 type2=c('a','b','a','a','b','b'),
                 type3=c('A','C','B','A','B','C')
                 )
ggplot(data=df, mapping = aes(x=xx, y=yy)) + 
geom_point(aes(shape=type3, fill=type2), size=5) +
  scale_shape_manual(values=c(24,25,21)) +
  scale_fill_manual(values=c('green', 'red'))
Run Code Online (Sandbox Code Playgroud)

结果图有一个图例,但它的'type2'部分并不反映fill价值尺度- 它是否符合设计?

样本图

r ggplot2

9
推荐指数
2
解决办法
2910
查看次数

将表达式传递给函数中的curve()

一位同事问我这个,我一直在努力.

假设我想定义一个函数,它将一个表达式(比如说x^2具体性)作为一个参数并将该参数传递给curve().

如果我想以简单的方式做到这一点,我就跑了

curve(x^2,from=0,to=3)
Run Code Online (Sandbox Code Playgroud)

它工作正常.

假设我尝试设置一个包装函数(假设除了绘制曲线之外,我还想在包装器中做其他事情):

f <- function(g) {
    curve(g,from=0,to=3)
}
Run Code Online (Sandbox Code Playgroud)

如果我传递一个函数,这是有效的:

f(function(x) x^2)
Run Code Online (Sandbox Code Playgroud)

如果我试图传递x^2,当R试图评估表达式时,它会失败:

f(x^2)
## Error in eval(expr, envir, enclos) (from #2) : object 'x' not found
Run Code Online (Sandbox Code Playgroud)

我可以尝试通过substitute在函数内使用来阻止它:

f0 <- function(g) {
    str(substitute(g))
    curve(substitute(g),from=0,to=3)
}
f0(x^2)
## language x^2
## Error in curve(substitute(g), from = 0, to = 3) (from #3) : 
##  'expr' must be a function, or a call or an expression containing 'x'
Run Code Online (Sandbox Code Playgroud)

好吧,这表明也许我应该尝试

f <- …
Run Code Online (Sandbox Code Playgroud)

r

9
推荐指数
1
解决办法
600
查看次数

有没有办法在glm函数中获得优化算法的每个步骤的系数?

当在R中执行logit回归时,可以在优化算法与coefficients()函数收敛(或不收敛)之后获得系数:

library(MASS)
data(menarche)
glm.out = glm(cbind(Menarche, Total-Menarche) ~ Age,
               family=binomial(logit), data=menarche)
coefficients(glm.out)
## (Intercept)         Age 
## -21.226395    1.631968
Run Code Online (Sandbox Code Playgroud)

有没有办法获得优化算法的每个步骤的系数来跟踪其步骤?

r glm

9
推荐指数
1
解决办法
365
查看次数

水平ggplot2 :: geom_violin没有coord_flip

我想绘制水平小提琴图(因为我的标签很长).我的设计限制是:

  • 多个facets(f1),每个facet(f2)的多个类别(所以我想使用aes(x=f2)facet_wrap(~f1)
  • 每个方面不同的尺度(所以我想scales="free")
  • 我想安排的4个不同方面facet_wrap()(排除一些切面技巧)

不幸的是scales="free",coord_flip()目前(并且在可预见的未来)不兼容.

这个相关问题的答案表明(1)黑客攻击一个新的水平地貌; (2)交换xy(正如所指出的那样,它只适用于散点图等对称的geoms); (3)放弃和继续传统的布局.

想法?

set.seed(101)
library("plyr")
dd <- expand.grid(f1=factor(1:2),
     f2=paste("inconveniently long label",1:2))
dd2 <- ddply(dd,c("f1","f2"),
             function(x)
                 data.frame(y=rnorm(100,
                         mean=10*(as.numeric(x$f2)), 
                         sd=10^(as.numeric(x$f1)))))
library("ggplot2")
Run Code Online (Sandbox Code Playgroud)

我的选择似乎是(1)带有scale="free"不方便的(横向)标签:

ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1,scale="free")+geom_violin()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

(2)有coord_flip(),不方便的尺度

ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1)+geom_violin()+coord_flip()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

尝试两个(ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1,scale="free")+geom_violin()+coord_flip())给出

ggplot2目前不支持使用非笛卡尔坐标或coord_flip的自由音阶.

其他想法:

  • 某些geoms(geom_errorbarh)有明确的水平版本; 我可以自己破解geom_violinh......
  • 在ggplot2的pull请求中有一些关于水平geoms的讨论
  • 这个(相当古老的)示例使用facet + geom_ribbon()来破解小提琴情节,但是它使用了分面,使其与facet_wrap()

对于它的价值,这就是我的真实情节(目前):

在此输入图像描述

r ggplot2

9
推荐指数
2
解决办法
1758
查看次数

使用模糊逻辑连接两个数据集

我正在尝试在两个数据集之间的R中进行模糊逻辑联接:

  • 第一个数据集具有位置名称和称为 config
  • 第二个数据集具有一个位置的名称和两个附加属性,在将它们加入第一个数据集之前需要对其进行汇总。

我想使用该name列在两个数据集之间进行联接。但是,该name列在数据集中可能包含其他字符或前导字符,或者在较大的单词内部包含一个单词。因此,例如,如果我们查看这两个数据集,我希望名称OPAL加入OPALAS,而SAUSALITO Y加入SAUSALITO。

Dataset1:    
     Name           Config
     ALTO D         BB
     CONTRA         ST
     EIGHT A        DD
     OPALAS         BB
     SAUSALITO Y    AA
     SOLANO J       ST

Dataset2:    
    Name       Age     Rank
    ALTO D     50      2
    ALTO D     20      6
    CONTRA     10      10
    CONTRA     15      15
    EIGHTH     18      21
    OPAL       19      4
    SAUSALITO  2       12
    SOLANO     34      43
Run Code Online (Sandbox Code Playgroud)

数据集2汇总代码

Data2a <- summaryBy(Age ~ Name,FUN=c(mean), data=Data2,na.rm=TRUE)
Data2b <- summaryBy(Rank ~ Name,FUN=c(sum), data=Data2,na.rm=TRUE)
Data2 <- data.frame(Data2a$Name, Data2a$Age.mean, Data2b$Rank.sum)

Desired Outcome:
    Name …
Run Code Online (Sandbox Code Playgroud)

join r string-matching fuzzy-logic fuzzy-comparison

9
推荐指数
1
解决办法
3704
查看次数

使用dplyr包中的select + unlist和使用美元符号有什么区别?

我一直在服用的在线课程中教师总是做以下获得,也就是说,该列Col1从一个data.frame对象Dat:

library(dplyr)
unlist(select(Dat, Col1))
Run Code Online (Sandbox Code Playgroud)

为什么不简单地跑Dat$Col1?我注意到两种结果的"表述"存在差异,但这两种形式之间是否存在其他重大差异?任何操作都会为两者产生相同的产品?

r dplyr

9
推荐指数
1
解决办法
183
查看次数