包中的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软件包的作者Claus Wilke 建议的那样,您可以随时bandwidth手动设置以避免消息(https://twitter.com/ClausWilke/status/921361195231215616).
但为什么不suppressMessages首先压制消息呢?
我恰好不知道这种预期的行为吗?
我进行了一项研究,回想起来(一个人,一个人学习:-))似乎产生了多层次的数据.现在我正在尝试从宽到长重构数据集,以便我可以使用例如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 是否可以做到这一点(我认为它可以,但也许这只是因为我倾向于假设 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),不如有一个公式,以便人们可以准确地购买他们需要的东西 - 但这当然需要一个公式。我们有一个对于一些我们认为可以的价格的想法,但现在我们需要将其转化为一个方程式。
我无法在中保存由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 存储为图像的需求非常普遍。但是我不知道我仍然可以探索哪些潜在的解决方案。
我非常感谢任何人提供的任何指导!
我有一个RMarkdown文档,其中包含"特殊字符",例如ë.如果我使用RStudio Server的"编织文档"按钮渲染文档,它会渲染得很好.当我使用RStudio服务器按钮,在采购另一条R脚本调用呈现它RMarkdown的render功能外,还呈现罚款.
但是,由于某些原因超出了我(但希望不会长久),当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)