r - 从 R 中的函数调用对象 - 找不到错误对象
问题描述
我正在尝试创建一个可变宽度柱形图,每列代表一个非重叠步骤。宽度将是步骤的平均值,高度是每个步骤的标准开发。这是我的原始代码:
df <- data.frame (Steps = c( "Step2", "Step3", "Step4", "Step5", "Step6", "Step7"), Variability = c(sd(dataset$PS02_days_creation_to_validation, na.rm = TRUE), sd(dataset$PS03_days_validation_to_sourcing, na.rm = TRUE), sd(dataset$PS04_days_sourcing_to_confirmation, na.rm = TRUE), sd(dataset$PS05_days_confirmation_to_ship_created, na.rm = TRUE),sd(dataset$PS06_days_ship_created_to_shipped, na.rm = TRUE), sd(dataset$PS07_days_shipped_to_reception,na.rm = TRUE) ), width = c(mean(dataset$PS02_days_creation_to_validation, na.rm = TRUE), mean(dataset$PS03_days_validation_to_sourcing, na.rm = TRUE), mean(dataset$PS04_days_sourcing_to_confirmation, na.rm = TRUE), mean(dataset$PS05_days_confirmation_to_ship_created,na.rm = TRUE), mean(dataset$PS06_days_ship_created_to_shipped,na.rm = TRUE), mean(dataset$PS07_days_shipped_to_reception,na.rm = TRUE) ))
df$w <- cumsum(df$width) #cumulative sums to gt the end points of each column.
df$wm <- df$w - df$width #giving the starting point of each column
library(ggplot2)
p <- ggplot(df, aes(ymin = 0))
p1 <- p + geom_rect(aes(xmin = wm, xmax = w, ymax = Variability, fill = Steps))
p1
当所有步骤都是肯定的时,此代码可以正常工作。但是,当第一步的宽度为负时,我的列会重叠。
即具有以下宽度=(25,50,75,100)的4步,使用上面的代码创建:终点w =(25,75,150,250)起点wm =(0,25,75,150)。伟大的!
现在,如果第一步的宽度更改为 (-25,50,75,100),那么代码会生成 w:(-25,25,100,200) 和 wm:(0,-25,25,100),这意味着这些步骤是重叠的!!相反,我想修改代码以生成: w=(-25,50,125,225) 和 wm:(0,0,50,125)
一位 R 大师亲切地建议使用此功能:
widths_to_starts_ends <- function(widths){
widths <- widths[widths != 0]
pos_widths <- widths[widths > 0]
neg_widths <- widths[widths < 0]
pos_ends <- cumsum(pos_widths)
pos_starts <- cumsum(pos_widths) - pos_widths
neg_widths <- abs(neg_widths)
neg_starts <- cumsum(neg_widths)
neg_ends <- cumsum(neg_widths) - neg_widths
neg_starts <- (-1)*neg_starts
neg_ends <- (-1)*neg_ends
return( list(s = c(neg_ends, pos_starts), e = c(neg_starts, pos_ends)) )
}
widths_to_starts_ends(c(-25,50,75,100))
这导致
$s
[1] 0 0 50 125
$e
[1] -25 50 125 225
我想将此函数嵌入到我的原始代码中(用 e 和 s 替换 w 和 wm 行)并制作一个图表,但我不知道如何调用对象 E 和 S。这就是我正在做的事情:
library(ggplot2)
p <- ggplot(df, aes(ymin = 0))
p1 <- p + geom_rect(aes(xmin = s, xmax = e, ymax = Variability, fill = Steps))
p1
但它说找不到对象 S。请问你能帮帮我吗?
解决方案
s 和 e 似乎是列表的元素,而不是独立的对象,我想这就是为什么找不到它们的原因。在您的函数中,您可以改为返回包含 s 和 e 列的数据框df,然后进行 ggplot 调用
ggplot(df, aes(xmin = s, xmax = e...)) + geom_rect()
推荐阅读
- swift - 从 api 调用获取数据后无法更新实例变量
- vhdl - 从 FSM 中的特定统计数据开始
- c++ - c++17: 自动从 std::unique_ptr 移动到 std::shared_ptr
- javascript - 除非打开开发人员模式,否则 JavaScript 无法在 Internet Explorer 11 上运行
- react-native - 我们可以在带有 Expo 的 React Native 项目中使用 Realm 吗?
- r - 使用 dplyr::mutate() 和 ifelse() 在 R 中基于排名顺序的条件变异语句
- r - Autoplot 仅使用 R 中时间序列的寓言绘制 ETS 的预测
- javascript - 从 MVC 模型将参数传递给 JavaScript 函数
- loadrunner - 如何在 LR 中将参数数组的值作为项目数据传递
- ruby - 使用 (gets.chomp) 输入字符串并生成直方图