小编Mik*_*kko的帖子

R中.Last.value的简写?

R中的.Last.value命令对于快速计算很有用,但名称很长并且难以编写(可能因为.Last.value不应该覆盖).因此,从上面的行复制粘贴数字通常会更快.

124/pi
# [1] 39.47043
.Last.value^2
# [1] 1557.915
Run Code Online (Sandbox Code Playgroud)

我知道可以对函数进行部分匹配,但是.Last.value这似乎不起作用:

1+1
# [1] 2
.Last.v + 1
# Error: object '.Last.v' not found
Run Code Online (Sandbox Code Playgroud)

是否有更方便(更短/更快/更好)的方式从R控制台绘制最后一个值?

r

2
推荐指数
1
解决办法
353
查看次数

将 ggplot2 图层分配给字符串并根据需要进行评估

背景

我正在尝试加速R 包的函数,该函数使用 ggplot2 绘制高分辨率地图。该函数basemap使用较大的 shapefile(每个 15 Mb)绘制斯瓦尔巴群岛地图。该地图是使用两个不同的 shapefile 图层(土地和冰川)以及一组“定义”(例如主题、轴比例和网格线)创建的。按照现在编写的代码,绘制地图大约需要 30 秒。

我的想法是,如果我可以打破代码片段中的图层并允许用户不绘制冰川,那么该函数的执行速度将提高两倍。另外,如果我可以将 ggplot2 语法指定为文本字符串并仅评估所需的字符串,那么 R 就不会浪费时间创建函数未使用的 ggplot2 对象。

我知道如何使用if else语句来做到这一点,但我想避免多次编写定义。似乎可以分配scale_x_continuous()给一个对象,但是分配scale_x_continuous() + scale_y_continuous()会产生错误:

scale_x_Continous() + scale_y_Continous() 中的错误:二元运算符的非数字参数

问题

如何将 ggplot2 轴定义分配给文本字符串并将它们与数据层粘贴在一起?

例子

我以iris数据集为例,这样大家就不用下载PlotSvalbard目前又大又乱的包了。请注意,我知道如何将颜色映射到变量。这里的要点只是为了将 shapefile 说明为iris数据集的两个子集:

library(ggplot2)
data(iris)

## Datasets to imitate the shapefile layers
ds1 <- subset(iris, Species == "setosa")
ds2 <- subset(iris, Species == "versicolor")

## Example how the basemap function works at …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

2
推荐指数
1
解决办法
243
查看次数

如何计算素食主义者rda / cca对象的物种贡献百分比?

我试图重现列(“变量”中FactoMineR::PCA,“种”在vegan::rda从贡献率,以轴线FactoMineRvegan。贡献编码为FactoMiner::PCA对象:

library(FactoMineR)
library(vegan)

data(dune)

fm <- FactoMineR::PCA(dune, scale.unit = FALSE, graph = FALSE)

head(round(sort(fm$var$contrib[,1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc  Poaprat  Poatriv 
#  17.990   16.020   13.866    7.088    6.861    4.850 
Run Code Online (Sandbox Code Playgroud)

通过查看的代码FactoMiner::PCA,我发现贡献的计算方式是:轴坐标平方除以轴特征值再乘以100%:

head(round(sort(100*fm$var$coord[,1]^2/fm$eig[1], decreasing = TRUE), 3))
# Lolipere Agrostol Eleopalu Planlanc  Poaprat  Poatriv 
#  17.990   16.020   13.866    7.088    6.861    4.850 
Run Code Online (Sandbox Code Playgroud)

我无法使用vegan::rda对象复制上述计算:

vg <- rda(dune)

head(round(sort(100*scores(vg, choices = 1, display = "sp", 
scaling = …
Run Code Online (Sandbox Code Playgroud)

r pca vegan

2
推荐指数
1
解决办法
382
查看次数

带有boxplot类型分组的Pointrange图

我有可以使用箱形图绘制的数据,但每个框的n只有3.我想在ggplot2中使用点范围类型的绘图来绘制它们.默认情况下,它们彼此重叠.当我们将它们分组到boxplot中时,如何将我的点并排分组?

library(ggplot2)

x <- rnorm(12, 3,5) # Real data are not always normally distributed.
y <- c(rep("T1", 6), rep("T2", 6))
z <- rep(c(10,20),6)

dat <- data.frame(Treatment = y, Temp = z, Meas = x)

p <- ggplot(dat, aes(Treatment, Meas))
p + geom_boxplot(aes(fill=factor(Temp)))
Run Code Online (Sandbox Code Playgroud)

编辑:我更新了问题,以排除bootstrapping建议(原始的想法是使用置信区间作为误差条.一个问题= D的问题太多).这里给出更详细的引导问题

在此输入图像描述

plot bootstrapping r ggplot2 confidence-interval

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

来自wide data.frames的摘要数据表

我试图找到data.frames从广泛创建汇总表的懒惰/简单方法data.frames.假设有一个以下data.frame,但是有更多列,因此指定列名需要很长时间:

set.seed(2)
x <- data.frame(Rep = rep(1:3, 4), Temp = c(rep(10,6), rep(20,6)), 
pH = rep(c(rep(8.1, 3), rep(7.6, 3)), 2),
Var1 = rnorm(12, 5,2), Var2 = c(rnorm(6,4,1), rnorm(6,3,5)),
Var3 = rt(12, 20))
x[1:3] <- as.data.frame(apply(x[1:3], 2, function(x) as.factor(x)))
Run Code Online (Sandbox Code Playgroud)

现在,我可以计算汇总统计信息plyr:

(mu <- ddply(x, .(Temp, pH), numcolwise(mean)))
(std <- ddply(x, .(Temp, pH), numcolwise(sd)))
(n  <- ddply(x, .(Temp, pH), numcolwise(length)))
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何同时应用所有这些功能:

ddply(x, .(Temp, pH), numcolwise(mean, sd, length))
Run Code Online (Sandbox Code Playgroud)

我当然可以合并各种摘要data.tables,但这不是一种"懒惰/简单"的方式.我正在寻找一些我可以在许多情况下应用的一般内容.这样的事情,除了应该可以使用单个函数生成:

xx <- merge(mu, std, by = c("Temp", "pH"), sotr = …
Run Code Online (Sandbox Code Playgroud)

r summary plyr dataframe

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

ggplot2中的“ gam”平滑问题

我正在尝试在ggplot2中使用GAM平滑。根据此对话此代码,仅当n> = 1000时,ggplot2才会加载用于通用加性模型的mgcv软件包。否则,用户必须手动加载该软件包。据我了解,对话中的示例代码应使用进行平滑处理geom_smooth(method="gam", formula = y ~ s(x, bs = "cs"))

library(ggplot2)
dat.large <- data.frame(x=rnorm(10000), y=rnorm(10000))
ggplot(dat.large, aes(x=x, y=y)) + geom_smooth() 
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误:

geom_smooth: method="auto" and size of largest group is >=1000, so using gam with formula: y ~ s(x, bs = "cs"). Use 'method = x' to change the smoothing method.
Error in s(x, bs = "cs") : object 'x' not found
Run Code Online (Sandbox Code Playgroud)

如果尝试以下操作,则会发生相同的错误:

ggplot(dat.large, aes(x=x, y=y)) + geom_point() + geom_smooth(method="gam", formula = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 mgcv

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

计算相关时出错

我有2列数据,数值如下,是制表符分隔格式:

Si1     Si2

8,99691 7,495936
7,7164173   8,092645
4,4428697   4,298263
7,4302206   7,189521
5,897344    5,316047
. 
.
.
Run Code Online (Sandbox Code Playgroud)

为了计算这些之间的相关性,我写了R代码如下:

int<-read.table("data.txt",sep="\t",head=TRUE)
attach(int)
cor(int$Si1,int$Si2)
Run Code Online (Sandbox Code Playgroud)

但它显示错误如下:

Error in cor(int$Si1,int$Si2) : 'x' must be numeric
Run Code Online (Sandbox Code Playgroud)

谁能告诉我怎么解决这个问题?

r

0
推荐指数
1
解决办法
337
查看次数

标签 统计

r ×7

ggplot2 ×3

bootstrapping ×1

confidence-interval ×1

dataframe ×1

mgcv ×1

pca ×1

plot ×1

plyr ×1

summary ×1

vegan ×1