小编Ric*_*ton的帖子


关闭ggplot中的一些传说

假设我有一个包含多个图例的ggplot.

mov <- subset(movies, length != "")
(p0 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point()
)
Run Code Online (Sandbox Code Playgroud)

我可以像这样关掉所有传说的显示:

(p1 <- p0 + theme(legend.position = "none"))
Run Code Online (Sandbox Code Playgroud)

传递show_guide = FALSEgeom_point(根据这个问题)关闭形状图例.

(p2 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  geom_point(show_guide = FALSE)
)
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要关闭颜色图例呢?似乎没有办法告诉show_guide哪个图例应用其行为.show_guide对于尺度或美学没有任何争论.

(p3 <- ggplot(mov, aes(year, rating, colour = length, shape = mpaa)) +
  scale_colour_discrete(show_guide = FALSE) +
  geom_point()
)
# Error in …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

197
推荐指数
2
解决办法
17万
查看次数

if/while(condition)中的错误{:缺少需要TRUE/FALSE的值

我收到此错误消息:

Error in if (condition) { : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)

要么

Error in while (condition) { : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)

它是什么意思,我该如何预防呢?

r r-faq

142
推荐指数
2
解决办法
39万
查看次数

从R写入Excel时处理java.lang.OutOfMemoryError

xlsx软件包可用于从R读取和写入Excel电子表格.不幸的是,即使对于中等大小的电子表格,java.lang.OutOfMemoryError也可能发生.特别是,

library(xlsx)
set.seed(19790801)
n_sheets <- 40
the_data <- replicate(
  n_sheets,
  {
    n_rows <- sample(2e5, 1)
    data.frame(
      x = runif(n_rows),
      y = sample(letters, n_rows, replace = TRUE)
    )
  },
  simplify = FALSE
)
names(the_data) <- paste("Sheet", seq_len(n_sheets))
Run Code Online (Sandbox Code Playgroud)

(其他相关的例外也是可能的,但更罕见.)

在阅读电子表格时,有人提出了类似的问题.

将大型xlsx文件导入R?

使用Excel电子表格作为CSV上的数据存储介质的主要优点是,您可以在同一文件中存储多个工作表,因此我们在此处考虑每个工作表要写入一个数据框的数据框列表.此示例数据集包含40个数据框,每个数据框具有两列,最多200k行.它设计得足够大,有问题,但你可以通过改变n_sheets和改变大小n_rows.

wb <- createWorkbook()  
for(i in seq_along(the_data))
{
  message("Creating sheet", i)
  sheet <- createSheet(wb, sheetName = names(the_data)[i])
  message("Adding data frame", i)
  addDataFrame(the_data[[i]], sheet)
}
saveWorkbook(wb, "test.xlsx")  
Run Code Online (Sandbox Code Playgroud)

将此文件写入文件的自然方法是使用创建工作簿createWorkbook,然后循环遍历每个数据框调用createSheetaddDataFrame.最后,可以使用工作簿将文件写入文件 …

r xlsx

78
推荐指数
2
解决办法
5万
查看次数

按组获取最高值

这是一个示例数据框:

d <- data.frame(
  x   = runif(90),
  grp = gl(3, 30)
) 
Run Code Online (Sandbox Code Playgroud)

我想要d包含x每个值的前5个值的行的子集grp.

使用base-R,我的方法是这样的:

ordered <- d[order(d$x, decreasing = TRUE), ]    
splits <- split(ordered, ordered$grp)
heads <- lapply(splits, head)
do.call(rbind, heads)
##              x grp
## 1.19 0.8879631   1
## 1.4  0.8844818   1
## 1.12 0.8596197   1
## 1.26 0.8481809   1
## 1.18 0.8461516   1
## 1.29 0.8317092   1
## 2.31 0.9751049   2
## 2.34 0.9269764   2
## 2.57 0.8964114   2
## 2.58 0.8896466   2 …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

76
推荐指数
4
解决办法
7万
查看次数

如何在MATLAB中处理函数参数的名称/值对

我有一个函数,它将可选参数作为名称/值对.

function example(varargin)
% Lots of set up stuff
vargs = varargin;
nargs = length(vargs);
names = vargs(1:2:nargs);
values = vargs(2:2:nargs);

validnames = {'foo', 'bar', 'baz'};    
for name = names
   validatestring(name{:}, validnames);
end

% Do something ...
foo = strmatch('foo', names);
disp(values(foo))
end

example('foo', 1:10, 'bar', 'qwerty')
Run Code Online (Sandbox Code Playgroud)

似乎在提取适当的值时需要付出很多努力(并且它仍然不是特别强大的再次严格指定的输入).有没有更好的方法来处理这些名称/值对?是否有MATLAB附带的辅助函数可以提供帮助?

matlab arguments function name-value function-parameter

65
推荐指数
6
解决办法
4万
查看次数

我如何处理特殊字符,如\ ^ $.?*| +()[{在我的正则表达式?

我想匹配一个正则表达式特殊字符,\^$.?*|+()[{.我试过了:

x <- "a[b"
grepl("[", x)
## Error: invalid regular expression '[', reason 'Missing ']''
Run Code Online (Sandbox Code Playgroud)

(等价stringr::str_detect(x, "[")stringi::stri_detect_regex(x, "[").)

将值加倍以逃避它不起作用:

grepl("[[", x)
## Error: invalid regular expression '[[', reason 'Missing ']''
Run Code Online (Sandbox Code Playgroud)

也没有使用反斜杠:

grepl("\[", x)
## Error: '\[' is an unrecognized escape in character string starting ""\["
Run Code Online (Sandbox Code Playgroud)

我如何匹配特殊字符?


这个问题的一些特殊情况是陈旧的,写得足够好,因为它可以像这样重复关闭:
在R正则表达式中逃脱的时期
如何逃避R中的问号?
在正则表达式中转义管道("|")

regex r r-faq

64
推荐指数
1
解决办法
10万
查看次数

使用插入包但在库中出错(e1071)

这是我的代码,非常标准,但我收到错误消息:

library(caret)
set.seed(32343)
modelFit = train(type~.,data=training, method='glm')
Run Code Online (Sandbox Code Playgroud)

错误消息:

Error in library(e1071) : there is no package called ‘e1071’
Run Code Online (Sandbox Code Playgroud)

任何的想法?谢谢!

r r-caret

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

你如何使用相同R包的多个版本?

为了能够比较包的两个版本,我需要能够选择我加载的包的版本.R的软件包系统默认设置为覆盖现有软件包,因此您始终拥有最新版本.如何覆盖此行为?

到目前为止我的想法是:

我可以获取包源,编辑描述以提供不同的名称,并实际构建两个不同的包.我宁愿能够直接使用二进制文件,因为它不那么麻烦.

我不一定需要同时加载两个版本的软件包(只是同时安装在某个地方).我或许Sys.getenv('R_HOME')可以改变R安装包.libpaths()的地方,然后改变R寻找它们的地方.这看起来很酷,所以有没有人有更好的想法?

versioning packages r

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

为什么R对象不能在函数或"for"循环中打印?

我有一个名为ddd的R矩阵.当我输入这个,一切正常:

i <- 1
shapiro.test(ddd[,y])
ad.test(ddd[,y]) 
stem(ddd[,y]) 
print(y) 
Run Code Online (Sandbox Code Playgroud)

对Shapiro Wilk,Anderson Darling和stem的调用全部工作,并提取相同的专栏.

如果我把这段代码放在"for"循环中,那么对Shapiro Wilk和Anderson Darling的调用就会停止工作,而stem&leaf调用和打印调用将继续工作.

for (y in 7:10) {
    shapiro.test(ddd[,y])
    ad.test(ddd[,y]) 
    stem(ddd[,y]) 
    print(y)
}

The decimal point is 1 digit(s) to the right of the |

  0 | 0
  0 | 899999
  1 | 0

[1] 7
Run Code Online (Sandbox Code Playgroud)

如果我尝试编写一个函数,会发生同样的事情.SW&AD不起作用.其他的电话呢.

> D <- function (y) {
+ shapiro.test(ddd[,y])
+ ad.test(ddd[,y]) 
+ stem(ddd[,y]) 
+ print(y)  }

> D(9)

  The decimal point is at the |

   9 | 000
   9 | 
  10 | 00000 …
Run Code Online (Sandbox Code Playgroud)

printing for-loop r r-faq

53
推荐指数
3
解决办法
8万
查看次数