小编Gre*_*gor的帖子

是否有必要保护.Call参数?

我有一堆Rcpp代码,我必须重写为一个无Rcpp的C/C++扩展(由于它的许可证),幸运的是它并没有像我担心的那样痛苦.但为了编写最干净的代码,我想确保我不会过度使用PROTECT/UNPROTECT.在写作R附加文档提到:"这不是一个好主意,然后只在PROTECT眼前的一切......"所以我想是尽职尽责的.

所以这是我想检查的事情.在阅读为R编写C扩展的所有示例时,我已经看到许多示例,其中作者保护传递函数的参数,如本文所述.

#include <R.h>
#include <Rdefines.h>
#include <string.h>
SEXP helloC1(SEXP greeting) {
  int i, vectorLength, stringLength;
  SEXP result;
  PROTECT(greeting = AS_CHARACTER(greeting));
  vectorLength = LENGTH(greeting);
  PROTECT(result = NEW_INTEGER(vectorLength));
  for (i=0; i<vectorLength; i++) {
    stringLength = strlen(CHAR(STRING_ELT(greeting, i)));
    INTEGER(result)[i] = stringLength;
  }
  UNPROTECT(2);
  return(result);
}
Run Code Online (Sandbox Code Playgroud)

SEXP问候作为一个论点传入,作者立即保护它.但是,从Writing R Extensions中我注意到了这一点:

对于R已经知道正在使用的对象,不需要保护.特别是,这适用于函数参数.

因此,为了进行健全性检查,有人可以告诉我,作者保护传入参数的代码示例是否可以减少?如果是这种情况,我将能够使我的代码更清洁.

c r

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

如何使数列升为幂数

我有:

cost = c(2^(-5),2^(-3),2^(-1),2^(1),2^(3),2^(5),2^(7),2^(9),2^(11),2^(13),2^(15))
Run Code Online (Sandbox Code Playgroud)

我想要一个更优雅的命令,例如:

seq(from = 2^(-5), to = 2^(15), by = __)
Run Code Online (Sandbox Code Playgroud)

r sequence seq

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

如何在 R 中将向量分解为连续的组

我很好奇是否有一种功能方法可以分解 R 中连续组的向量。

例如,如果我有以下内容

# start with this
vec <- c(1,2,3,4,6,7,8,30,31,32)

# end with this
vec_vec <- list(c(1, 2, 3, 4),c(6,7,8),c(30,31,32))
print(vec_vec[1])
Run Code Online (Sandbox Code Playgroud)

我只能想象这可以通过 for 循环来计算先前值的差异,但也许有更好的方法来解决这个问题。

r

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

如何使用循环和应用函数在 R 中平方矩阵元素

我有一个在 R 中制作的 3x3 矩阵。我要求对矩阵中的所有数字进行平方。首先使用循环,然后使用应用函数。我已经做了以下工作。

myMatrix = matrix ( c(1,2,3,4,5,6,7,8,9), nrow=3, ncol=3)
Run Code Online (Sandbox Code Playgroud)

所以这给了我我的矩阵。然后我用这个来平方它们

 myMatrix * myMatrix ##don't know how to make a loop to do this
Run Code Online (Sandbox Code Playgroud)

最后我尝试使用 apply() 函数来做同样的事情

  apply(myMatrix, c(1,2), exp) ##this gave me numbers that didnt look correct
Run Code Online (Sandbox Code Playgroud)

任何在正确方向上的帮助都会非常好。

谢谢

r matrix

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

如何将向量的打印列与sprintf(R)对齐

假设我在R中有3个向量:

x <- c("xskdlfl", "  y", "lkjsf")
y <- c(22.5, 6, 7.0)
z <- c("slk","llkjdf", "xx")
Run Code Online (Sandbox Code Playgroud)

我想产生一个格式化的表格输出,最右边的字符对齐,除第一列外的所有列都这样对齐:

xskdlfl        y     lkjsf
22.5         5.6       7.0
slk       llkjdf        xx
Run Code Online (Sandbox Code Playgroud)

在R中没有太多凌乱的编程的情况下,我无法弄清楚如何使用sprintf做到这一点。在R中使用sprintf可以做到这一点的简单方法吗?使用“格式?” 我希望链接到一个好的sprintf教程。提前致谢。

c formatting r

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

R 中协方差矩阵的特征值之一为负

我有一个数据集x。我用它cov(x)来计算 的协方差x。我想计算 的倒数平方根cov(x)。但我得到 的负特征值cov(x)

这是我的代码

S11=cov(x)
S=eigen(S11,symmetric=TRUE)
R=solve(S$vectors %*% diag(sqrt(S$values)) %*% t(S$vectors))
Run Code Online (Sandbox Code Playgroud)

这就是 的特征值S

c(0.897249923338732, 0.814314811717616, 0.437109871173458, 0.334921280373883, 
0.291910583884559, 0.257388456770167, 0.166787180227719, 0.148268784967556, 
0.121401731579852, 0.0588333377333529, 0.0519459283467876, 0.0472867806813002, 
0.0438199555429584, 0.0355421239839632, 0.0325106968911777, 0.0282860419784165, 
0.0222240269478354, 0.0174657163114068, 0.012318267910606, 0.00980611646284724, 
0.00969450391092417, 0.00804912897151307, 0.00788628666010145, 
0.00681419055130702, 0.00664707528670254, 0.00591471779140177, 
0.00581608875646686, 0.0057489828718098, 0.00564645095578336, 
0.00521029715741059, 0.00503304953884416, 0.0048677189522647, 
0.00395692706081966, 0.00391665618240403, 0.00389825739725093, 
0.00383611535401152, 0.00374242176786387, 0.0035160324422885, 
0.00299245160843966, 0.0029501156885799, 0.00289484923017341, 
0.00287327878694529, 0.0028447265712214, 0.00274130080219099, 
0.00273159993035393, 0.00265595612239575, 0.00261856622830277, 
0.0020004125628823, 0.00199834766485368, 0.00199579695856402, 
0.00198945452395265, 0.00197999810684363, 0.00195954105720554, 
0.00195502875017394, …
Run Code Online (Sandbox Code Playgroud)

r eigenvalue matrix-decomposition

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

如何将 ggplot2 条形图中 y 轴的比例更改为数千?

我正在使用这段代码:

ggplot2::ggplot(DATAFRAME, aes(x = as.factor(VARIABLE))) + ggplot2::geom_bar()
Run Code Online (Sandbox Code Playgroud)

绘制数据框 DATAFRAME 中变量 VARIABLE 每个级别的出现次数。然而,它是一个相当长的数据框,所以我希望计数以千为单位而不是单位。有人知道怎么做这个吗?

r scale ggplot2 geom-bar

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

ggplot2:为stat_summary内部的平滑几何图形添加填充美学

我有什么是使用stat_summary生成均值和置信带如何在ggplot2 stat_summary图中设置多种颜色时删除数据点的版本并且也可能与此错误报告有关,该错误报告与SE参数https://github.com/tidyverse/ggplot2/issues/1546有关,但我似乎无法弄清楚自己在做什么错。

我有每周数据,并试图绘制当前年份,上一年,5年平均值和5年范围。我可以获得图和所需的所有元素,但无法获得与scale_fill命令相关的范围内的填充。

绘制样本

这是我正在使用的代码:

library(plyr)
require(dplyr)
require(tidyr)
library(ggplot2)
library(lubridate)
library(zoo) 
library(viridis)

  ggplot(df1,aes(week,value)) +
  geom_point(data=subset(df1,year(date)==year(Sys.Date()) ),size=1.7,aes(colour="1"))+ 
  geom_line(data=subset(df1,year(date)==year(Sys.Date()) ),size=1.7,aes(colour="1"))+ 
  geom_line(data=subset(df1,year(date)==year(Sys.Date())-1 ),size=1.7,aes(colour="2"))+
  geom_point(data=subset(df1,year(date)==year(Sys.Date())-1 ),size=1.7,aes(colour="2"))+ 
  #stat_summary(data=subset(df1,year(date)<year(Sys.Date()) &year(date)>year(Sys.Date())-6),geom = 'smooth', alpha = 0.2,size=1.7,
  #             fun.data = median_hilow,aes(colour=c("1","2","3"),fill="range"))+
  stat_summary(data=subset(df1,year(date)<year(Sys.Date()) &year(date)>year(Sys.Date())-6),geom="smooth",fun.y = mean, fun.ymin = min, fun.ymax = max,size=1.7,aes(colour="c",fill="b"))+
  #stat_summary(fun.data=mean_cl_normal, geom='smooth', color='black')+
  scale_color_viridis("",discrete=TRUE,option="C",labels=c(year(Sys.Date()), year(Sys.Date())-1,paste(year(Sys.Date())-6,"-",year(Sys.Date())-1,"\naverage",sep ="")))+
  scale_fill_viridis("",discrete=TRUE,option="C",labels=paste(year(Sys.Date())-6,"-",year(Sys.Date())-1,"\nrange",sep =""))+     
  #scale_fill_continuous()+
  scale_x_continuous(limits=c(min(df1$week),max(df1$week)),expand=c(0,0))+
  theme_minimal()+theme(
    legend.position = "bottom",
    legend.margin=margin(c(0,0,0,0),unit="cm"),
    legend.text = element_text(colour="black", size = 12),
    plot.caption = element_text(size = 14, face = "italic"), …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2

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

ggplot2:yaxis 标签未跨面对齐

我在 ggplot 中跨面对齐轴标签时遇到一些问题。我试图左对齐所有 y 轴标签以使文本看起来更统一,但是当“scales = free”参数添加到脚本中时,标签仅构面内对齐。我已经用一些虚拟代码进行了测试,并且出现了同样的问题:

test <- data.frame(label = c('a', 'ab', 'a', 'abc', 'abcd', 'abcde', 
                             'abcdef', 'abcdefg', 'abcdefgh', 
                             'abcdefghi', 'abcdefghij', 
                             'abcdefghijkfiutdkjgbhcvi'),
                   xdum = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                   facett = rep(c("Facet 1", "Facet 2", "Facet 3"), 4), 
                   data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))

ggplot(test, aes(x = xdum, y = label, label = data)) + 
  facet_grid(facett~., scales = "free", space = "free") …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

固定一个轴时如何在两点之间画一条线(时间序列)

我试图使用ggplot2在两个变量的每个点之间绘制一条直线,这两个变量是同时观察到的.我查看了geom_segment,但我很难在我的案例中使其工作.

这是我最小的工作示例和我想要实现的图画(我缺少的部分是蓝色).

我将不胜感激任何帮助!

set.seed(1234)
y <- rnorm(10,0,0.01)
Date <- seq(as.Date("2000/1/1"), by = "day", length.out = 10)

example_df <- tibble(Date,y) %>% mutate(avg = mean(y))
ggplot(example_df, mapping = aes(x = Date)) + geom_point(mapping = aes(y = y)) +
  geom_line(aes(y = y)) + 
  geom_line(aes(y = avg), col = "red")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2

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

标签 统计

r ×10

ggplot2 ×4

c ×2

eigenvalue ×1

formatting ×1

geom-bar ×1

matrix ×1

matrix-decomposition ×1

plot ×1

scale ×1

seq ×1

sequence ×1