小编Mat*_*ion的帖子

为什么ggplot不允许抑制其geoms生成的消息?

包中的geom_density_ridgesgeom ggridges创建了脊线,如果没有指定带宽,它会尝试找到合理的值.然后使用baseR message函数报告该值(请参阅https://twitter.com/ClausWilke/status/921363157553172480).

base一个R函数suppressMessages功能被设计为抑制这样的消息.例如,此代码输出一条消息:

message('This is a message');
Run Code Online (Sandbox Code Playgroud)

这段代码什么都没输出:

suppressMessages(message('This is a message'));
Run Code Online (Sandbox Code Playgroud)

但是,出于某种原因,当将这个geom添加到ggplot时,抑制消息似乎被抑制了.下面的代码仍然会产生一条消息:

require('ggplot2');
require('ggridges');
suppressMessages(ggplot(Orange, aes(x=age,y=Tree)) + geom_density_ridges());
Run Code Online (Sandbox Code Playgroud)

(具体来说," Picking joint bandwidth of 319".)

为什么是这样?ggplot无论用户的规格如何,是否确实能够确保消息传递?或者这实际上是我刚才不知道的明智行为?

生成RMarkdown报告时,message可以将chunk选项设置为message=FALSE,这将抑制呈现级别的所有消息.因为那是我的用例,我的问题就解决了.

正如该ggridges软件包的作者C​​laus Wilke 建议的那样,您可以随时bandwidth手动设置以避免消息(https://twitter.com/ClausWilke/status/921361195231215616).

为什么suppressMessages首先压制消息呢?

我恰好不知道这种预期的行为吗?

r ggplot2 r-markdown ggridges

11
推荐指数
1
解决办法
772
查看次数

如何使用"四重嵌套"将宽数据帧转换为多级结构的长数据帧?

我进行了一项研究,回想起来(一个人,一个人学习:-))似乎产生了多层次的数据.现在我正在尝试从宽到长重构数据集,以便我可以使用例如lme4进行分析.

在这样做的过程中,我遇到了一个,嗯,挑战,我之前遇到过几次,但是我从来没有找到一个好的解决方案.这次我再次搜索,但我可能使用错误的关键字 - 或者这个问题比我想象的要少得多.

基本上,在此数据集中,变量名指示收集哪些度量数据.我问参与者评分(率)干预(可能是真的).每次干预都属于6个行为领域之一.此外,参与者对每次干预进行评估,无论是在其自身呈现时,还是与其他干预同时进行,或者与其他两种干预措施同时进行.有三种类型的干预措施,它们都在(t0)之前和之后(t1)进行了评估,并向他们提供了一些信息.

所以,实际上,我有一个可以像这样重新生成的数据帧:

### Elements of the variable names
measurementMomentsVector <- c("t0", "t1");
interventionTypesVector <- c("fear", "know", "scd");
nrOfInterventionsSimultaneouslyVector <- c(1, 2, 3);
behaviorDomainsVector <- c("diet", "pox", "alc", "smoking", "traff", "adh");

### Generate a vector with all variable names
variableNames <-
  apply(expand.grid(measurementMomentsVector,
                    interventionTypesVector,
                    nrOfInterventionsSimultaneouslyVector,
                    behaviorDomainsVector),
        1, paste0, collapse="_");

### Generate 5 'participants' worth of data
wideData <- data.frame(matrix(rnorm(5*length(variableNames)), nrow=5));

### Assign names
names(wideData) <- variableNames;

### Add unique id variable for every participants
wideData$id <- 1:5;
Run Code Online (Sandbox Code Playgroud)

所以使用 …

r reshape dataframe reshape2

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

在 R 中,如何获得一组数据的最佳拟合方程?

我不确定 R 是否可以做到这一点(我认为它可以,但也许这只是因为我倾向于假设 R 可以做任何事情:-))。我需要的是找到描述数据集的最佳拟合方程。

例如,如果您有以下几点:

df = data.frame(x = c(1, 5, 10, 25, 50, 100), y = c(100, 75, 50, 40, 30, 25))

如何得到最佳拟合方程?我知道你可以通过以下方式获得最佳拟合曲线:

plot(loess(df$y ~ df$x))
Run Code Online (Sandbox Code Playgroud)

但据我了解,您无法提取方程,请参阅Loess Fit and Resulting Equation

当我尝试自己构建它时(注意,我不是数学家,所以这可能不是理想的方法:-)),我最终得到如下结果:

y.predicted = 12.71 + ( 95 / (( (1 + df$x) ^ .5 ) / 1.3))
Run Code Online (Sandbox Code Playgroud)

哪种似乎近似它 - 但我不禁认为可能存在更优雅的东西:-)

我有一种感觉,拟合线性或多项式模型也行不通,因为该公式似乎与这些模型通常使用的不同(即这个似乎需要除法、幂等)。例如,将多项式模型拟合到 R 中的数据中的方法给出了非常糟糕的近似值。

我记得很久以前就存在做这种事情的语言(Matlab 可能是其中之一?)。R 也可以这样做,还是我只是在错误的地方?

(背景信息:基本上,我们需要做的是找到一个方程,根据第一列中的数字确定第二列中的数字;但我们自己决定数字。我们知道我们希望曲线看起来如何喜欢,但如果我们得到更好的拟合,我们可以将这些数字调整为方程式。这是关于产品的定价(当前昂贵的定性数据分析软件的更便宜的替代品);您购买的“项目积分”越多,就越便宜它应该成为。与其强迫人们购买给定的数量(即 5 或 10 或 25),不如有一个公式,以便人们可以准确地购买他们需要的东西 - 但这当然需要一个公式。我们有一个对于一些我们认为可以的价格的想法,但现在我们需要将其转化为一个方程式。

equation r

5
推荐指数
1
解决办法
2万
查看次数

在R中,如何将data.tree图保存到文件中?

我无法在中保存由plot.Node函数生成的绘图data.tree。我尝试了以下方法:

### Create tree object and plot it
data(acme);
plot(acme);
Run Code Online (Sandbox Code Playgroud)

正如人们所期望的那样,这可以很好地显示情节。

### Try saving it as png
png(filename='file.png', type='cairo-png');
plot(acme);
dev.off();
Run Code Online (Sandbox Code Playgroud)

这将创建一个空文件。ggsave一样。显然,plot.Node它是DiagrammeR在引擎盖下使用的,所以我调查了那个包装。它具有导出图形的功能:

export_graph(acme, file_name="file.png");
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

Error in file.exists(diagram) : invalid 'file' argument
Run Code Online (Sandbox Code Playgroud)

当我第一次转换为GraphViz时,出现了另一个错误:

export_graph(ToGraphViz(acme), file_name="file.png");

Error in graph$dot_code : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)

显然,导出到GraphViz并不能完全导出DiagrammeR的预期。

我在RStudio中,因此理论上可以使用GUI保存图,但是我需要在脚本中使用。

显然,plot.Node实际上并没有绘制任何内容-相反,它似乎会生成html / js。这是否意味着该结果不能存储为图形?还是我完全缺少的某些导出/转换功能?当然,我感觉好像缺少了一些明显的东西-我认为将绘制的data.trees 存储为图像的需求非常普遍。但是我不知道我仍然可以探索哪些潜在的解决方案。

我非常感谢任何人提供的任何指导!

tree plot r image save

5
推荐指数
1
解决办法
2171
查看次数

为什么RMarkdown` render`行为取决于它是从RStudio Server还是从PHP shell调用的?

我有一个RMarkdown文档,其中包含"特殊字符",例如ë.如果我使用RStudio Server的"编织文档"按钮渲染文档,它会渲染得很好.当我使用RStudio服务器按钮,在采购另一条R脚本调用呈现它RMarkdownrender功能外,还呈现罚款.

但是,由于某些原因超出了我(但希望不会长久),当index.php使用以下方法调用相同的R脚本时,我会得到不同的结果:

$results = shell_exec("R --file='/home/username/public_html/some/subdirectories/process.R' --no-save 2>&1");
Run Code Online (Sandbox Code Playgroud)

当我这样做时,在生成的.html文件中,特殊符号(我猜unicode符号)被替换为<U+00EB>.我试着查看这是否是某些我尚未了解的HTML元素变体,但我一直无法找到任何相关信息.

(注意:任何指向我可以了解更多相关信息的地方的链接(当我们在这里时,为什么我的浏览器不显示它,例如,它代表的ë,也非常感谢!)


可重复的例子

内容example.php:

<?php
  shell_exec("R --file='/home/username/public_html/subdirectory/example.R' --no-save 2>&1");
?>
Run Code Online (Sandbox Code Playgroud)

内容example.R(这是我需要我的服务器上的):

workingPath <- "/home/username/public_html/subdirectory";

### Set path to RStudio's pandoc version
Sys.setenv(PATH=paste(Sys.getenv("PATH"),
                      "/usr/lib/rstudio-server/bin/pandoc",
                      sep=":"));

### Set HOME and LANG
Sys.setenv(HOME = '/home/username');
Sys.setenv(LANG = 'en_US.UTF-8');

require(rmarkdown);

renderResults <-
  render(file.path(workingPath, 'example.Rmd'),
         output_file = file.path(workingPath, 'example.html'),
         intermediates_dir = file.path(workingPath, 'tmp'),
         encoding="UTF-8");
Run Code Online (Sandbox Code Playgroud)

内容example.Rmd:

---
title: 'Reproducable example'
output: …
Run Code Online (Sandbox Code Playgroud)

r rstudio knitr r-markdown

4
推荐指数
1
解决办法
354
查看次数

标签 统计

r ×5

r-markdown ×2

dataframe ×1

equation ×1

ggplot2 ×1

ggridges ×1

image ×1

knitr ×1

plot ×1

reshape ×1

reshape2 ×1

rstudio ×1

save ×1

tree ×1