小编dar*_*zig的帖子

使用ggplot2仅将一个轴转换为log10比例

我有以下问题:我想在箱线图上可视化离散和连续变量,其中后者具有一些极高的值.这使得箱形图无意义(图表中的点甚至"主体"太小),这就是为什么我想以log10的比例显示它.我知道我可以忽略可视化中的极值,但我并不打算这样做.

让我们看一个钻石数据的简单例子:

m <- ggplot(diamonds, aes(y = price, x = color))
Run Code Online (Sandbox Code Playgroud)

替代文字

问题在这里并不严重,但我希望你能想象为什么我希望以log10的比例看到这些值.我们来试试吧:

m + geom_boxplot() + coord_trans(y = "log10")
Run Code Online (Sandbox Code Playgroud)

替代文字

正如您所看到的那样,y轴是log10缩放并且看起来很好但是x轴存在问题,这使得绘图非常奇怪.

问题不会发生scale_log,但这不是我的选择,因为我不能这样使用自定义格式化程序.例如:

m + geom_boxplot() + scale_y_log10() 
Run Code Online (Sandbox Code Playgroud)

替代文字

我的问题:有没有人知道在y轴上用log10刻度绘制boxplot的解决方案,标签可以用formatter这个线程中的函数自由格式化?


根据答案和评论编辑问题以帮助回答者:

我真正追求的是:一个log10转换轴(y)没有科学标签.我想将它标记为美元(formatter=dollar)或任何自定义格式.

如果我尝试@ hadley的建议,我会收到以下警告:

> m + geom_boxplot() + scale_y_log10(formatter=dollar)
Warning messages:
1: In max(x) : no non-missing arguments to max; returning -Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In max(x) : no non-missing arguments to max; …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 boxplot scaletransform

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

如何快速将数据加载到R?

我有一些R脚本,我必须尽快在R中加载几个数据帧.这非常重要,因为读取数据是程序中最慢的部分.例如:从不同的数据帧绘图.我以sav(SPSS)格式获取数据,但我可以将其转换为建议的任何格式.不幸的是,合并数据帧不是一个选项.

什么是加载数据的最快方法?我在考虑以下几点:

  • 第一次从sav转换为二进制R对象(Rdata),后来总是加载它,因为它看起来要快得多read.spss.
  • sav转换为csv文件并从主题中讨论的给定参数读取数据,
  • 或者是否值得在localhost上设置MySQL后端并从中加载数据?会更快吗?如果是这样,我还可以保存attr变量的任何自定义值(例如来自Spss导入文件的variable.labels)吗?或者这应该在一个单独的表中完成?

欢迎任何其他想法.感谢您提前提出的每一个建议!


我根据你给出的答案在下面做了一个小实验,并且还添加了(24/01/2011)一个非常"hackish"但非常快速的解决方案,只从一个特殊的二进制文件中加载几个变量/列.后者似乎是我现在能想象的最快的方法,这就是为什么我编写了一个名为save的小包来处理这个功能(05/03/2011:ver.0.3).该套餐正在"重"开发,欢迎任何推荐!

microbenchmark软件包的帮助下,我将很快发布一个具有准确基准测试结果的小插图.

performance benchmarking load r

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

R - 如何在数据框中替换部分变量字符串

我有一个数据帧df:

var1 var2
"test" "testing"
"esten" "etsen"
"blest" "estten"
Run Code Online (Sandbox Code Playgroud)

现在我要删除df中的所有"t"以获取:

var1 var2
"es" "esing"
"esen" "esen"
"bles" "esen"
Run Code Online (Sandbox Code Playgroud)

我怎么做?

replace r dataframe

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

Roxygen:如何设置默认参数,包括反斜杠('\')到函数

我使用Roxygen来生成正在开发的包的Rd文件,但是我的函数默认参数设置为' \n',例如:

  lineCount <- function(text, sep='\n') {
       ...
   }
Run Code Online (Sandbox Code Playgroud)

用于计算'\n'字符串中的新line()字符的目的是什么.问题是R CMD检查发出警告:

Codoc mismatches from documentation object 'lineCount':
lineCount
  Code: function(text, sep = "\n")
  Docs: function(text, sep = " ")
  Mismatches in argument default values:
    Name: 'sep' Code: "\n" Docs: " "
Run Code Online (Sandbox Code Playgroud)

在我看来,这个问题是由写入Rd文件引起的(写入标准的LaTeX文件cat()总是需要为某种目的双重转义字符,例如:\\newline - 正如我所经历的那样).如果我在分隔符上添加一个额外的反斜杠,例如:

  lineCount <- function(text, sep='\\n') {
       ...
   }
Run Code Online (Sandbox Code Playgroud)

这个问题仍然存在,就像它看起来的代码一样'\\n',但在文档(Rd文件)中它看起来像'\n'.

我的问题有一个简单的解决方案吗?可能是Roxygen中的额外标签,它可以定义如何将函数的参数写入Rd文件?对不起,如果被问到太明显的问题,但我在谷歌ing一段时间后迷路了.


历史:http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24


更新:使用roxygen2!

r roxygen

22
推荐指数
1
解决办法
1210
查看次数

使用进度条的FOR循环包装器

我喜欢在运行慢for循环时使用进度条.这可以通过几个助手轻松完成,但我确实喜欢tkProgressBar来自tcltk包.

一个小例子:

pb <- tkProgressBar(title = "Working hard:", min = 0, max = length(urls), width = 300)
for (i in 1:300) {
    # DO SOMETHING
    Sys.sleep(0.5)
    setTkProgressBar(pb, i, label=paste( round(i/length(urls)*100, 0), "% ready!"))
}
close(pb)
Run Code Online (Sandbox Code Playgroud)

而且我想设置一个小函数存储在我的.Rprofile中,命名为forp(as:for循环带进度条),调用就像for但是使用自动添加的进度条 - 但遗憾的是不知道如何实现和抓取expr部分循环函数.我做了一些实验do.call但没有成功:(

虚构的工作示例(其作用类似于for循环,但TkProgressBar在每次迭代中创建并自动更新它):

forp (i in 1:10) {
    #do something
}
Run Code Online (Sandbox Code Playgroud)

更新:我认为问题的核心是如何编写一个函数,该函数不仅在函数后面的括号中有参数(如:)foo(bar),而且还可以expr在结束括号后指定,如:foo(bar) expr.


BOUNTY OFFER:会找到任何可以修改我建议的函数的 …

expression loops r function wrapper

19
推荐指数
3
解决办法
1631
查看次数

Moore-Penrose推广了一个大型稀疏矩阵的逆

我有一个方形矩阵,有几万行和一列,只有几10,所以我用这个Matrix包以高效的方式存储在R中.由于base::matrix内存不足,对象无法处理该数量的单元格.

我的问题是我需要矩阵以及此类矩阵的Moore-Penrose广义逆,这是我目前无法计算的.

我尝试过的:

  • solve产生Error in LU.dgC(a) : cs_lu(A) failed: near-singular A (or out of memory)错误
  • MASS::ginvMatrix班级不相容
  • 没有直接的方法将稀疏转换Matrix为例如bigmemory::big.matrix,而后者也MASS::ginv无论如何也无法工作
  • 如果我尝试计算矩阵的Choleski分解以便稍后调用Matrix::chol2inv它,我会收到以下错误消息:

    Error in .local(x, ...) : 
      internal_chm_factor: Cholesky factorization failed
    In addition: Warning message:
    In .local(x, ...) :
      Cholmod warning 'not positive definite' at file ../Cholesky/t_cholmod_rowfac.c, line 431
    
    Run Code Online (Sandbox Code Playgroud)
  • 基于相关问题,我还尝试pbdDMAT了单个节点上的包,但pbdDMAT::chol产生了Cholmod error …

r linear-algebra sparse-matrix matrix-inverse large-data

15
推荐指数
1
解决办法
2375
查看次数

使用pander在HTML中创建R统计报告

我正在使用R和Sweave编写HTML格式的统计报告,但我无法改进表格格式xtable,因此看到daroczig的pander ,我认为这足以满足我的目的.

问题是,当我Pandoc.brew在brew文件上运行函数没有任何反应时,R控制台仍然执行某些操作但没有输出,我必须关闭R会话以中断该过程.对于pander示例文件会发生这种情况.

我在Debian 6.0.5上运行R 2.15.0和Pandoc 1.5.1.1-5.我安装了pander包,如pander的网站所示.

任何帮助将完全赞赏.提前致谢.

r pander

13
推荐指数
0
解决办法
1067
查看次数

R中的快速采样

有没有比base::sample函数更快的方法来获取随机子样本(没有替换)?

r

10
推荐指数
1
解决办法
1855
查看次数

将千字节,兆字节等转换为R中的字节

R中是否有标准函数来转换表示字节数的字符串,例如

  • 11855276K
  • 113M
  • 2.40g的

到整数个字节?

humanReadable在包gdata中遇到过,但这反过来又转换了.我知道我可以解析字符串,然后自己做数学,但我想知道是否已存在某些东西.

byte r

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

计算数据框中的唯一项

我想要在研究的每个条件中简单计算受试者的数量.数据看起来像这样:

subjectid  cond   obser variable
1234        1        1      12   
1234        1        2      14
2143        2        1      19
3456        1        1      12 
3456        1        2      14 
3456        1        3      13   

etc       etc    etc       etc
Run Code Online (Sandbox Code Playgroud)

这是一个大型数据集,并不总是很明显有多少独特的主题对每种情况有贡献等.

我在data.frame中有这个.

我想要的是类似的东西

cond   ofSs 
1       122 
2        98
Run Code Online (Sandbox Code Playgroud)

对于每个"条件",我得到对该条件贡献数据的唯一S数的计数.看起来这应该是非常简单的.

r

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