小编Jan*_*ary的帖子

重新排序R data.frame的子集,同时修改行名称

给定data.frame:

foo <- data.frame(ID=1:10, x=1:10)
rownames(foo) <- LETTERS[1:10]
Run Code Online (Sandbox Code Playgroud)

我想重新排序由行名称定义的行的子集.但是,我想交换foo的行名.我可以

sel <- c("D", "H") # rows to reorder
foo[sel,] <- foo[rev(sel),]
sel.wh <- match(sel, rownames(foo))
rownames(foo)[sel.wh] <- rownames(foo)[rev(sel.wh)]
Run Code Online (Sandbox Code Playgroud)

但这很漫长而复杂.有更简单的方法吗?

r dataframe

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

使用knitr强制使用PDF包装晕影

我有一个小插图我的包编译成一个漂亮的PDF编译时Rscript -e 'rmarkdown::render("tmod.rmd")'.但是,当我编译并安装软件包时,启动R并键入vignette("mypackagename"),浏览器窗口打开时带有难看的HTML,没有标题,没有目录和没有引用.

但是,如果我在创建包之前手动将小插图编译为pdf,它会显示正常.

什么地方出了错?为什么编译包时我的PDF不会自动生成?

在markdown文件标题中,我有

---
title: "foo foo foo"
author: "Foofooary Finer"
date: "`r Sys.Date()`"
output:
  pdf_document:
vignette: >
  %\VignetteIndexEntry{FooFoo}
  %\VignetteKeyword{foo}
  %\VignetteEngine{knitr::knitr}
  %\SweaveUTF8
  \usepackage[utf8](inputenc)
abstract: |
  foo foo foo foo foo
toc: yes
bibliography: bibliography.bib
---
Run Code Online (Sandbox Code Playgroud)

在包文件中,我有

VignetteBuilder: knitr
Suggests: knitr
Run Code Online (Sandbox Code Playgroud)

pdf vignette r knitr

7
推荐指数
1
解决办法
406
查看次数

Pandoc、markdown、powerpoint:支持方程?

Pandoc 现在可以从 Markdown生成 powerpoint 演示文稿。这似乎工作得很好。

然而,当我尝试包含一个方程时——即使是像 $a=2$幻灯片的全部内容都消失了。这是错误还是功能?您可以在 PowerPoint 演示文稿中包含方程式吗?我希望我最终能够在纯文本文件中使用 TeX 数学语法编写我的讲座(由于原因需要在 PowerPoint 中)。

编辑:

转换文件中保存的markdown文档的命令test.rmd

render("test.rmd")
Run Code Online (Sandbox Code Playgroud)

最小示例#1:

---
output: powerpoint_presentation
---

## Math test

This is a test (no maths)
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明

测试示例#2:

---
output: powerpoint_presentation
---

## Math test

This is a test $a=2$
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明

版本:

> rmarkdown::pandoc_version()
[1] ‘2.7.1’
> packageVersion("rmarkdown")
[1] ‘1.10’
Run Code Online (Sandbox Code Playgroud)

MS PowerPoint 2007。请注意,如果选择 Word 输出,则公式会按预期显示。

markdown latex equation math-mode pandoc

7
推荐指数
1
解决办法
2059
查看次数

如何在R中绘制3D箭头?

我正在使用rgl包来创建我的数据的3D图.由于某些原因(3D PCA biplots)我需要矢量 - 带箭头的线段.而且我被卡住了,因为我希望将3D锥体作为箭头.

不知何故,我无法围绕问题的几何形状包裹我的老态思维.说,我会画矢量

segments3d( rbind( c( 0, 0, 0 ), c( 3, 3, 3 ) ) )
Run Code Online (Sandbox Code Playgroud)

也就是说,从用户坐标系原点到[3,3,3]的向量.

我想创建一个尖端为[3,3,3]的圆锥体.锥体的底部可以形成圆形.在半径为r的xz平面(垂直于y平面)上绘制一个圆很容易:

n <- 10
sin.t <- sin( seq( 0, 2 * pi, len= n ) )
cos.t <- cos( seq( 0, 2 * pi, len= n ) )
r <- 0.1 
xv <- x + r * sin.t
yv <- rep( y, n )
zv <- z + r * cos.t
Run Code Online (Sandbox Code Playgroud)

但是我现在如何变换这些点,使得圆现在垂直于向量?它的中心距离矢量方向的尖端是0.2?一旦我进行了这个变换,我将绘制具有该triangles3d函数的三角形,每个三角形在尖端具有一个角,并且在圆的点内具有两个顶点.

这是基本的数学,我知道18岁的我不会有问题(甚至是28岁的我).任何钩(而不是鱼)将是值得赞赏的.

3d graphics r vector

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

文本标签与R中的轮廓

我想知道是否可以在R中绘制带有轮廓的文本,这样文本可以独立于背景读取(如模因文本).以下(显然)失败:

# prepare a colorful background
randcolors <- sprintf( "#%02X%02X%02X99", sample(1:255, 1000, replace=T), sample(1:255, 1000,replace=T), sample(1:255, 1000, replace=T))
plot( NULL, xlim=c(0,1), ylim=c(0,1), xaxt="n", bty="n", yaxt="n")
points( runif(1000, 0, 1 ), runif( 1000, 0, 1 ), cex=runif(1000, 0.5, 5), col= randcolors, pch= 19)
text( 0.5, 0.5, "test text", cex= 5 )
text( 0.5, 0.5, "test text", cex= 4.5, col="white" )
Run Code Online (Sandbox Code Playgroud)

结果并不壮观:

在此输入图像描述

显然,我可以先创建一个白色或半透明的背景,但实际上我更喜欢有漂亮的轮廓.

plot text r

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

R中的颜色渐变PDF和位图输出

我正努力在R中获得视觉上可接受的颜色渐变(有关我的特定情况的详细说明,请参见此处).简而言之,问题是当R窗口中的输出看起来没问题时,PDF会在用于生成渐变的段之间显示细白线.

n <- 100
cc <- colorRampPalette(c("red", "blue"))(n)
plot.new()
par(mar=rep(0,4))
sapply(1:n, function(i) rect((i-1)/n, 0, i/n, 1, col=cc[i], border=NA))
dev.copy2pdf(file="test.pdf")
Run Code Online (Sandbox Code Playgroud)

结果如下:

截图1

你可以看到细细的白线.它们的位置取决于缩放,因此我假设它们是PDF显示方式的工件.在另一个缩放中同样如此:

截图2

不幸的是,这些线条在打印输出上也是可见的.我想问题可能是当矢量图形渲染到位图进行显示或打印时,PDF中的坐标如何变圆.

可能的解决方案是使用彼此重叠的段.这仅适用于纯色; 不幸的是,我也希望在渐变中使用透明色.

我可以做些什么来使我的PDF输出更好?

pdf color-scheme r vector-graphics

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

如何使包中的依赖项成为可选

我正在 R 中编写一个包,其中 \xe2\x80\x93 等 \xe2\x80\x93 可以使用 rgl 显示绘图。然而,我和我的学生一起发现 rgl 很麻烦:尤其是对于那些使用 Mac 的人。我最终花了很多时间帮助他们安装 RGL。

\n\n

是否有一种适当的、CRAN 认可的方法可以使包选择性地依赖于 rgl?如果无法加载 rgl,某些函数会发送警告消息并正常退出?我应该怎样做最好?

\n\n

编辑:我知道如何在函数中实际执行此操作;但是,我不知道如何在包要求中正式定义它,以便 (i) CRAN 不会抱怨,但 (ii) rgl 被正式指定为可选依赖项。

\n

dependencies r package

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

使用dplyr将数据框和列表转换为长格式

这是一个难题。

假设您有一个数据框和一个列表。列表中的元素与df中的行一样多:

dd <- data.frame(ID=1:3, Name=LETTERS[1:3])
dl <- map(4:6, rnorm) %>% set_names(letters[1:3])
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法(最好使用dplyr / tidyverse)来制作长格式,以使列表中的元素与数据帧的相应行连接在一起?这是我心目中不太优雅的方式:

rows <- map(1:length(dl), ~ rep(., length(dl[[.]]))) %>% unlist()
dd <- dd[rows,]
dd$value <- unlist(dl)
Run Code Online (Sandbox Code Playgroud)

如您所见,对于中的每个向量dl,我们都会根据需要将对应的行复制多次,以容纳每个值。

r tidyverse

6
推荐指数
3
解决办法
135
查看次数

取消列出列表而不丢失 NULL

我有一个函数,它接受字符向量作为输入并返回不一致的结果。如果输入中没有 NA,它将返回“翻译”值的命名向量。如果输入中有 NA,它将返回一个列表。与 NA 对应的列表元素将为 NULL,名称为 NA。

\n\n

这是重新创建的列表:

\n\n
foo <- list(a=1, b=2, c=NULL)\nnames(foo) <- c("a", "b", NA)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要是一个缺失值中包含 NA 的向量:

\n\n
c(1, 2, NA)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,简单的unlist()\xe2\x80\x93 不起作用,NULL 元素消失。我尝试了以下方法:

\n\n
foo <- lapply(foo, function(x) if(is.null(x)) NA else x)\nnames(foo) <- NULL\nunlist(foo)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这有效。然而, foo 相当大(数万个元素),并且上面的代码似乎相当慢。有更好的解决方案吗?

\n

r

6
推荐指数
2
解决办法
1649
查看次数

Pandoc输出中的表格或图像太宽,如DOCX或PDF/LaTeX

我正在使用pandoc和markdown写一个快速而肮脏的报告.

我需要以最小的麻烦生成PDF或DOCX,我不在乎哪个(当然最好是两者).此外,我对数字和表格有一定的限制 - 它们已经与另一个程序先验地生成,我宁愿能够插入它们,因为它们将它们转换为适合pandoc的需要.

但是,主要的限制是我不想手动编辑生成的文档,无论是LaTeX还是DOCX.我想在降价时进行所有编辑.

这是问题所在:

  • 在DOCX中,表格显示正常:它们具有文档的宽度.但是,这些数字太宽了.我可以将图像转换为较低的分辨率(看起来不太好),或者手动调整Word中的图像大小(这是不可能的).
  • 在PDF中,生成的数字很好(或多或少),但是会出现另外两个问题:
    • 表格太宽,因为没有换行符,而且
    • LaTeX是LaTeX,数字和表格的顺序是"重组"的,也就是说,它们不是连续的.

因此,生成的文档都不能用于我的目的.

我想做的就是将一些结果拼凑在一起并生成一个我可以发送给另一位科学家的文件.

问题:在pandoc中以最小的努力生成快速而脏的报告的最佳解决方案是什么,并且至少所有结果都可见?

更新:将pandoc升级到1.4或更高版本可以解决问题 - 这些数字现在在docx文档中具有正确的大小.

pdf markdown latex pandoc

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