什么时候seq_along有效,但seq会产生意想不到的结果?
从?seq我们的文档:
请注意,无论参数名称如何,它都会调度第一个参数的类.如果仅使用一个参数来调用它可能会产生意想不到的后果
along.with:这样做会更好:seq_along在这种情况下使用它会好得多.
关于如何避免使用有几个问题 eval(parse(...))
这引发了一些问题:
eval(parse())避免? get()?)难道ifelse真的同时计算yes和no载体-如,每个向量的全部?或者它只是从每个向量计算一些值?
还有,ifelse真的那么慢吗?
清理包含需要折叠的多个级别的因子的最有效(即有效/适当)方法是什么?也就是说,如何将两个或多个因子级别组合成一个.
这是一个示例,其中"是"和"Y"这两个级别应折叠为"是","否"和"N"折叠为"否":
## Given:
x <- c("Y", "Y", "Yes", "N", "No", "H") # The 'H' should be treated as NA
## expectedOutput
[1] Yes Yes Yes No No <NA>
Levels: Yes No # <~~ NOTICE ONLY **TWO** LEVELS
Run Code Online (Sandbox Code Playgroud)
一个选择当然是在手工使用sub和朋友之前清理琴弦.
另一种方法是允许重复标签,然后丢弃它们
## Duplicate levels ==> "Warning: deprecated"
x.f <- factor(x, levels=c("Y", "Yes", "No", "N"), labels=c("Yes", "Yes", "No", "No"))
## the above line can be wrapped in either of the next two lines
factor(x.f)
droplevels(x.f)
Run Code Online (Sandbox Code Playgroud)
但是,有更有效的方法吗?
虽然我知道levels …
我有一个函数来操作ggplot对象,通过将其转换为grob然后修改图层.我希望函数返回一个ggplot对象而不是grob.有没有一种简单的方法将grob转换回gg?
该文档上ggplotGrob是非常稀疏.
简单的例子:
P <- ggplot(iris) + geom_bar(aes(x=Species, y=Petal.Width), stat="identity")
G <- ggplotGrob(P)
... some manipulation to G ...
## DESIRED:
P2 <- inverse_of_ggplotGrob(G)
such that, we can continue to use basic ggplot syntax, ie
`P2 + ylab ("The Width of the Petal")`
Run Code Online (Sandbox Code Playgroud)
更新:
要回答评论中的问题,这里的动机是根据每个方面中标签名称的值,以编程方式修改构面标签的颜色.以下功能很好地工作(基于前一个问题中的baptise输入).
我希望返回值colorByGroup是一个ggplot对象,而不仅仅是一个grob.
这是代码,对于那些感兴趣的人
get_grob_strips <- function(G, strips=grep(pattern="strip.*", G$layout$name)) {
if (inherits(G, "gg"))
G <- ggplotGrob(G)
if (!inherits(G, "gtable"))
stop ("G must be a gtable object or a gg object")
strip.type <- …Run Code Online (Sandbox Code Playgroud) 更改a中factor列的级别的正确方法是什么data.table (注意:不是数据框)
library(data.table)
mydt <- data.table(id=1:6, value=as.factor(c("A", "A", "B", "B", "B", "C")), key="id")
mydt[, levels(value)]
[1] "A" "B" "C"
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似的东西:
mydt[, levels(value) <- c("X", "Y", "Z")]
Run Code Online (Sandbox Code Playgroud)
但是,当然,上述行不起作用.
# Actual # Expected result
> mydt > mydt
id value id value
1: 1 A 1: 1 X
2: 2 A 2: 2 X
3: 3 B 3: 3 Y
4: 4 B 4: 4 Y
5: 5 B 5: 5 Y
6: 6 C 6: 6 Z
Run Code Online (Sandbox Code Playgroud) 我有一个数据集,我必须从中制作几十个图.数据由30个组组成,每组内有多个测量值.
大多数情节不会同时使用所有群组.
我的目标是为一组组提供一个单色托盘,使得任何给定组在所有图形中都是相同的颜色.在下面的例子中,这将意味着Group C在相同的颜色Plot 1和Plot 2.
我的问题是如何解决这个问题.
我尝试过scale_fill_manual的几种变体(适当的时候还有scal_color_manual).虽然颜色是从指定的托盘中选择的,但我似乎无法通过组来索引托盘,或者以其他方式"跳过"对应于缺少组的颜色
我还想过尝试将颜色信息添加为正在绘制的数据列,但我不确定如何使用此列作为组的颜色.

# SAMPLE DATA:
DT1 <- data.table(Name=c("C_sub1", "A_sub1", "A_sub2"), Value=c(2,5,3), Group=c("C", "A", "A"), key="Group")
DT2 <- data.table(Name=c("A_sub1", "B_sub1", "C_sub1", "C_sub2"), Value=c(4,3,6,3), Group=c("A", "B", "C", "C"), key="Group")
# SAMPLE Color Pallette
ColorsDT <- data.table(Group=LETTERS[1:5], Color=c("#333BFF", "#CC6600", "#9633FF", "#E2FF33", "#E3DB71"), key="Group")
# Add a column for Color, according to the Group
DT1[ColorsDT, Color := i.Color]
DT2[ColorsDT, Color := i.Color]
# A Basic Plot
simplePlot <- function(DT, tit)
ggplot(DT …Run Code Online (Sandbox Code Playgroud) 显然在我的上一个问题中,我表现出了data.frame和之间的混淆data.table.不可否认,我没有意识到有区别.
所以我读了每个人的帮助,但是在实际的日常用语中,有什么不同,含义是什么以及每个用于什么会有助于指导我们适当的用法?
鉴于现有的剧情对象是有可能添加层UNDERNEATH现有图层?
例如,在下面的图表中,是有可能添加geom_boxplot()到P使得出现箱线图下方 geom_point()?
## Starting from:
library(ggplot2)
P <- ggplot(data=dat, aes(x=id, y=val)) + geom_point()
## This adds boxplot, but obscures some of the points
P + geom_boxplot()
Run Code Online (Sandbox Code Playgroud)
# Which is essentially
ggplot(data=dat, aes(x=id, y=val)) + geom_boxplot() + geom_point()
## However, this involves re-coding all of P (after the point insertion of the new layer).
## which is what I am hoping to avoid.
Run Code Online (Sandbox Code Playgroud)

额外问题: 如果现有图中有多个图层,是否可以指示插入新图层的具体位置(相对于现有图层)?
set.seed(1)
N <- 100
id …Run Code Online (Sandbox Code Playgroud) r ×10
ggplot2 ×3
data.table ×2
colors ×1
eval ×1
factors ×1
grob ×1
if-statement ×1
layer ×1
parsing ×1
performance ×1
r-faq ×1
seq ×1
setwd ×1