相关疑难解决方法(0)

我们如何制作xkcd样式图?

显然,民间已经想出了如何在MathematicaLaTeX中制作xkcd风格的图形.我们可以用R做吗?GGPLOT2-ERS?一个geom_xkcd和/或theme_xkcd?

我想在基本图形中,par(xkcd = TRUE)?我该怎么做?

XKCD#1064

作为ggplot2中的第一个刺(并且在下面更加优雅地显示),将jitter参数添加到一行可以获得很好的手绘外观.所以 -

ggplot(mapping=aes(x=seq(1,10,.1), y=seq(1,10,.1))) + 
  geom_line(position="jitter", color="red", size=2) + theme_bw()
Run Code Online (Sandbox Code Playgroud)

这是一个很好的例子 - 但轴和字体显得比较棘手.但是,字体显示已解决(下方).处理轴的唯一方法是将它们清空并用手绘制它们吗?有更优雅的解决方案吗?特别是在ggplot2中,是否可以修改新主题系统中的element_line以获取类似抖动的参数?

plot r ggplot2

682
推荐指数
7
解决办法
8万
查看次数

在函数中给定行设置调试代码的快速方法是什么?

前言:

R trace()是一个功能强大的调试工具,允许用户"在任何函数中的选定位置插入调试代码".不幸的是,从命令行使用它可能相当费力.

作为一个人为的例子,假设我想插入调试代码,该代码将报告计算的间隔时间间隔pretty.default().我想在delta计算值后立即插入代码,从函数定义的底部开始大约四行.(键入pretty.default以查看我的意思.)要指示该行,我需要找到它对应的代码中的哪一步.答案结果是步骤list(c(12, 3, 3)),我通过执行以下步骤来实现这一点:

as.list(body(pretty.default))
as.list(as.list(body(pretty.default))[[12]])
as.list(as.list(as.list(body(pretty.default))[[12]])[[3]])
as.list(as.list(as.list(body(pretty.default))[[12]])[[3]])[[3]]
Run Code Online (Sandbox Code Playgroud)

然后我可以插入这样的调试代码:

trace(what = 'pretty.default',
      tracer = quote(cat("\nThe value of delta is: ", delta, "\n\n")), 
      at = list(c(12,3,3)))
## Try it
a <- pretty(c(1, 7843))
b <- pretty(c(2, 23))
## Clean up
untrace('pretty.default')
Run Code Online (Sandbox Code Playgroud)

问题:

所以这里有我的问题:有没有办法打印出一个函数(或它的解析版本),其中的行被它们所属的步骤很好地标记了?(根据Venables和Ripley的说法,S-plus有一个函数tprint()"产生一个函数体的编号列表,用于at参数trace",但R似乎没有等价物.)或者,还有另一种更简单的方法,从命令行,快速设置函数内特定行的调试代码?

附录:

我使用这个pretty.default()例子是因为它有合理的驯服,但是有了真实/有趣的功能,反复使用as.list()很快会变得烦人和分散注意力.这是一个例子:

as.list(as.list(as.list(as.list(as.list(as.list(as.list(as.list(as.list(body(#
model.frame.default))[[26]])[[3]])[[2]])[[4]])[[3]])[[4]])[[4]])[[4]])[[3]]
Run Code Online (Sandbox Code Playgroud)

debugging r

21
推荐指数
2
解决办法
887
查看次数

重新定义R包中的函数

我试图通过首先定义一个函数来修改和重新定义R包xcms中的函数(xcmsRaw)

my.xcmsRaw <- function(filename, profstep = 1, profmethod = "bin",
                    profparam = list(mzcorrf=1),    # PATCH - mzcorrf is the m/z correction factor, e.g. 0.99888 for long-chain hydrocarbons
                    includeMSn = FALSE, mslevel=NULL,
                    scanrange=NULL) { ... }
Run Code Online (Sandbox Code Playgroud)

然后输入

unlockBinding("xcmsRaw", as.environment("package:xcms"))
assign("xcmsRaw", my.xcmsRaw, as.environment("package:xcms"))
lockBinding("xcmsRaw", as.environment("package:xcms"))
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,它给了我错误

Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'profBinM' of mode 'function' was not found
Run Code Online (Sandbox Code Playgroud)

由于它没有找到profBinM函数,这是一个在xcms包的文件xcms.c中定义的C代码函数.

有关如何解决此问题的任何想法?(我在Windows 7下工作,使用R版本3.0.0)

r function redefine package

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

有什么方法可以禁用PDF/Poscript输出中的"减去黑客"?

在R中,将绘图保存为PDF或Postscript文件时,轴标签中的连字符将变为减号.显然,这是设计上的.根据"postscript"设备的文档:

[正常编码规则]有一个例外.字符45('" - "')始终设置为负(在Adobe ISOLatin1中的值),即使它在其他编码中是连字符.在所有拉丁语编码,西里尔语和希腊语中,连字符可用作字符173(八进制0255).(这可以在UTF-8语言环境中输入为""\ uad"'.)

有没有办法关闭此功能?

我遇到的问题是我经常以各种格式保存图表,如果我按照建议的"\ uad"解决方法,我会在Postscript/PDF输出中得到预期的连字符,但在将我的图表渲染到其他图形设备(如PNG)时没有任何内容.我宁愿不必为每个情节创建两个版本,一个用于PDF,一个用于PNG.

如果我可以禁用"减黑",那么跨图形设备的渲染行为将是一致的,我可以简单地将绘图"打印"到多个设备以获得不同的格式.例如,我希望能够执行以下操作,并在绘图的PDF和PNG版本中使连字符呈现一致:

p <- qplot(arrival_rate, mean_service_time, data = response_times, ...)
ggsave(p, file = "/tmp/service-scaling.pdf", useDingbats = F)
ggsave(p, file = "/tmp/service-scaling.png")
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

graphics r hyphen ggplot2

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

标签 统计

r ×4

ggplot2 ×2

debugging ×1

function ×1

graphics ×1

hyphen ×1

package ×1

plot ×1

redefine ×1