小编Joh*_*lby的帖子

switch()语句用法

我对R中的switch语句有点困惑.只需在googling函数中我得到一个例子,如下所示:

switch的一个常见用途是根据函数的一个参数的字符值进行分支.

 > centre <- function(x, type) {
 + switch(type,
 +        mean = mean(x),
 +        median = median(x),
 +        trimmed = mean(x, trim = .1))
 + }
 > x <- rcauchy(10)
 > centre(x, "mean")
 [1] 0.8760325
 > centre(x, "median")
 [1] 0.5360891
 > centre(x, "trimmed")
 [1] 0.6086504
Run Code Online (Sandbox Code Playgroud)

然而,这似乎只是if为每个指定了一堆语句type

这就是全部switch()吗?有人可以给我更多的例子和更好的应用吗?

r switch-statement

104
推荐指数
1
解决办法
15万
查看次数

ggplot2:在不同的层上系统地多种颜色标度或颜色变换?

当我制作盒子图时,我也喜欢在后台显示原始数据,如下所示:

library(ggplot2)
library(RColorBrewer)

cols = brewer.pal(9, 'Set1')

n=10000
dat = data.frame(value=rnorm(n, 1:4), group=factor(1:4))

ggplot(dat, aes(x=group, y=value, color=group, group=group)) +
  geom_point(position=position_jitter(width=0.3), alpha=0.1) +
  scale_color_manual(values=cols) +
  geom_boxplot(fill=0, outlier.size=0)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,我不喜欢它当点太密集时我的盒子图完全消失了.我知道我可以调整alpha,这在某些情况下很好,但是当我的团队密度不同时(例如,如果我减少alpha到最轻的组会完全消失,以便最暗的组不会遮挡框图) .我正在尝试做的是系统地改变箱形图的颜色 - 可能有点暗 - 这样即使背景点最大化了alpha,它们也会出现.例如:

plot(1:9, rep(1, 9), pch=19, cex=2, col=cols)
cols_dk = rgb2hsv(col2rgb(brewer.pal(9, 'Set1'))) - c(0, 0, 0.2)
cols_dk = hsv(cols_dk[1,], cols_dk[2,], cols_dk[3,])
points(1:9, rep(1.2, 9), pch=19, cex=2, col=cols_dk)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

到目前为止,我还没有找到一种方法来伪造一个不同scale_colorgeom_boxplot层(如果有办法,这似乎是最简单的路线).我也没有能够找到一种简单的语法来系统地调整颜色,就像你可以轻松地抵消连续美学一样aes(x=x+1).

我能得到的最接近的是完全复制因子的水平......

ggplot(dat, aes(x=group, y=value, color=group, group=group)) +
  geom_point(position=position_jitter(width=0.3), alpha=0.1) +
  scale_color_manual(values=c(cols[1:4], cols_dk[1:4])) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

33
推荐指数
3
解决办法
8864
查看次数

e1071 R包的SVM方程?

我有兴趣测试SVM性能,将几个人分为四组/每组.当使用MATLAB中的svmtrain LibSVM函数时,我能够根据该等式的值得到用于对这4个组中的个体进行分类的三个方程式.计划如下:

                All individuals (N)*
                      |
 Group 1 (n1) <--- equation 1 --->  (N-n1)
                                      |
                   (N-n1-n2) <--- equation 2 ---> Group 2 (n2)
                      |
Group 3 (n3) <--- equation 3 ---> Group 4(n4)

*N = n1+n2+n3+n4
Run Code Online (Sandbox Code Playgroud)

有没有办法在e1071 R包中使用svm函数来获得这些方程式?

r machine-learning svm libsvm

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

中断循环与系统命令

我正在越来越多地使用Rscript,我通常会使用bash脚本.一个小烦恼是,许多这些脚本循环一些system()调用,如果我试图中断它,R基本上没有时间来捕获我的控制-c.相反,它只是中止正在运行的系统命令并继续下一个循环迭代.例如,当我尝试通过按住control-c来中断以下操作时,它仍然会通过所有迭代:

for(i in 1:10) {
  cat(i)
  system('sleep 3')
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我总是通过在每个循环中插入一个小暂停来解决这个问题

for(i in 1:10) {
  Sys.sleep(0.25)
  cat(i)
  system('sleep 3')
}
Run Code Online (Sandbox Code Playgroud)

如果我按住control-c,这将让我在一两次迭代中中止,但我想知道,有没有更有效的方法来实现这种行为?

r

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

无法使用coord_trans设置限制

我有一些数据显示几何关系,但有异常值.例如:

x = seq(0.1, 1, 0.01)
dat = data.frame(x=x, y=10^x)
dat[50:60, 2] = 10

qplot(x, y, data=dat, geom='line')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想使用对数变换绘制它,同时放大部分数据.我知道我可以用第一部分coord_trans(y='log10')或第二部分来做coord_cartesian(ylim=c(2,8)),但是我无法将它们组合起来.此外,我需要保持这些点,所以简单地剪切它们scale_y_continuous(limits=c(2,8))对我不起作用.

有没有办法实现这一点,而不必采取以下可怕的黑客攻击?也许是一种无法通过限制的无证方式coord_trans

pow10 <- function(x) as.character(10^x)

qplot(x, log10(y), data=dat, geom='line') +
  scale_y_continuous(breaks=log10(seq(2,8,2)), formatter='pow10') +
  coord_cartesian(ylim=log10(c(2,8)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r ggplot2

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

条件格式化:使单元格丰富多彩

是否可以执行以下操作:

loc1 <- c("Aa", "Aa", "aa", "Aa")
loc2 <- c("aa", "aa", "aa", "AA")
loc3 <- c("aa", "Aa", "aa", "aa")
gen <- data.frame(loc1, loc2, loc3)

loc1g <- c(0.01, 0.5, 1, 0.75)
loc2g <- c(0.2, 0.1, 0.2, 0.6)
loc3g <- c(0.8, 0.8, 0.55, 1)
pval <- data.frame(loc1g, loc2g, loc3g)
Run Code Online (Sandbox Code Playgroud)

我想打印到文件到gen数据帧,这是由pval数据帧有条件地格式化的.比颜色(row1,col1)的平均值取决于pvale(row1,col1).以下是颜色编码:

0 to 0.3   is "red" text color 
0.31 to 0.7 is "yellow"
> 0.7  is "red" 
Run Code Online (Sandbox Code Playgroud)

gen [1,1]将以红色文字颜色打印"Aa"等等....

感谢你的帮助.

EDITS:

我更感兴趣的是打印而不是绘图.如果我可以将输出保存为MS excel并在MSEXCEL中打开它会很棒.我也可以是其他类型的文本编辑器格式,可以读取彩色编码文本.由于我的原始数据矩阵的尺寸应为1000 x 1000甚至更大.我想快速了解每个gen类别的p值.

excel formatting r

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

MATLAB中的GROUP BY

我想做SQL的GROUP BY在MATLAB中做的事情.例如,

M = [
1,5;
2,5;
3,5;
1,6;
2,6;
1,7]

SQL:SELECT MAX(c1),c2 FROM M(c1,c2)GROUP BY 2

结果= [
3,5;
2,6;
1,7]

我怎样才能在Matlab中做到这一点?

matlab octave

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

在批处理模式下使用openGL渲染器时,所有文本都会丢失

在没有显示的情况下以批处理模式运行MATLAB(例如,未设置$DISPLAYUNIX环境变量,或matlab -nodisplay启动时使用标志),通常不能使用opengl渲染器.相反,你必须满足于painters渲染器.例如:

>> print -dpng -opengl fig.png
Warning: OpenGL mode can not be used in terminal emulation mode; ignoring option. 
Run Code Online (Sandbox Code Playgroud)

不幸的是,painters在处理具有补丁,光照,透明度等的3D场景时,往往效果不佳.这是一个简单的例子(现在使用显示),其中alpha丢失:

peaks
alpha(0.5)
print -dpng -opengl peaks_opengl.png
print -dpng -painters peaks_painters.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


由于这些限制,我感到非常兴奋的发现大多-无证hardcopy()内置MATLAB函数,它以某种方式让你使用opengl渲染器没有显示.这个功能是很棒的export_fig()功能的基础.现在,我能够以批处理模式快速保存高质量的3D数字.

但是,有一个问题:当图形通过hardcopy()函数时,所有文本都会丢失.例如:

plot(1,1)
title('TEST')
Run Code Online (Sandbox Code Playgroud)
>> A = hardcopy(gcf, '-Dopengl', '-r300');
Warning: Failed to draw text string
> In /Applications/MATLAB_R2010b.app/toolbox/matlab/graphics/hardcopy.p>hardcopy at 21
Run Code Online (Sandbox Code Playgroud)

输出数字完全没有任何文本(没有轴标记标签,没有标题):

export_fig axis.png -opengl
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以我想知道的是:如何让 …

opengl matlab plot

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

显示文件或对象之间的差异

在R中有没有办法比较对象并返回有用的东西,比如差异在哪里?我需要比较文件,但我愿意将它们读入data.frames.这可能只是从命令行处理得更好,但我想将我的测试封装到一个R脚本中.我的下一次尝试是使用ddply将每一行发送到compare()函数并返回"FALSE"行的行号,但这只有在你有一次插入或删除时才有效,然后其他所有行都变为"FALSE".

谢谢.

编辑:文件包含数字和字符数据的组合.

diff r

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

如何使用R,Java和JRI绘制图形?

我是R的新手,所以请原谅我这是一个非常基本的问题.

我写了一个R脚本,它做了一些计算,并在最后绘制了Box Plot.如果我从R控制台运行此脚本,它运行正常并绘制图形.

如果我从Java程序(JRI站点上给出的示例rtest.java程序)运行脚本,则计算结果很好.但绘制图表存在一些问题.框架窗口打开并保持忙碌并挂起.(如果我尝试单击窗口,则显示"无响应".)我正在使用JRI.

这就是我在脚本中绘制图形的方式:

boxplot(mat);
Run Code Online (Sandbox Code Playgroud)

以上命令在R控制台上正常工作.

我很确定这是关于某些导入/包或类似的设置.但无法弄清楚到底是什么.

谁能帮我这个?

谢谢.

编辑1: 我的盒子绘图命令的输出:

在此输入图像描述

在John提供的链接上输出此代码:

在此输入图像描述

java plot r jri

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

绘制级别为系列

我有一个如下所示的数据集:

id      factor  H1  H2  H3  H4  H5  H6
434543  lev3    0.8 0.7 0.7 0.5 0.6 0.8
434544  lev2    0.5 0.7 0.9 0.7 0.7 0.1
434545  lev3    0.7 0.7 0.8 0.5 0.7 0.7
434546  lev2    0.4 0.6 0.5 0.8 0.7 0.2
434547  lev3    0.6 0.7 0.8 0.8 0.8 0.7
434548  lev2    0.7 0.7 0.6 0.7 0.8 0.4
434549  lev2    0.8 0.8 0.8 0.7 0.6 0.5
434550  lev1    0.3 0.3 0.4 0.3 0.4 0.5
434551  lev1    0.0 0.3 0.4 0.3 0.2 …
Run Code Online (Sandbox Code Playgroud)

plot grouping r

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

R数值向量列表 - >带有Rcpp的C++ 2d数组

我主要使用R,但最终想使用Rcpp与一些C++函数接口,这些函数接收并返回2d数字数组.因此,为了开始使用C++和Rcpp,我想我只是做了一个小函数,将我的可变长度数字向量的R列表转换为C++等价物并再次返回.

require(inline)
require(Rcpp)

test1 = cxxfunction(signature(x='List'), body = 
'
  using namespace std;
  List xlist(x);
  int xlen = xlist.size();
  vector< vector<int> > xx;
  for(int i=0; i<xlen; i++) {
    vector<int> test = as<vector<int> > (xlist[i]);
    xx.push_back(test);
  }
  return(wrap(xx));
'
, plugin='Rcpp')
Run Code Online (Sandbox Code Playgroud)

这就像我期望的那样:

> test1(list(1:2, 4:6))
[[1]]
[1] 1 2

[[2]]
[1] 4 5 6
Run Code Online (Sandbox Code Playgroud)

不可否认,我只是通过非常详尽的文档的一部分,但有没有更好的(即更像Rcpp)方式进行R - > C++转换而不是for循环?我想可能不是,因为文档提到(至少使用内置方法)as"提供较少的灵活性,并且当前处理R对象转换为原始类型",但我想检查,因为我非常新手在这方面.

c++ arrays r rcpp

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

在Sublime Text 3中,如何更改注释字符?

我喜欢自动评论功能Ctrl + /,但我希望能够随意更改它使用的角色.我看过许多类似的问题这一个,但它不完全是一个通用的解决方案.

如何让评论角色使用不同的东西?具体的用例是我正在编写R代码并使用Roxygen2作为文档.这#'用作注释字符,而不仅仅是#.所以我想设置sublime使用,#'因为我不能将它用于Roxygen2评论.

关于Sublime2的问题,就像这个,引用'.tmPreferences'文件,但我在Sublime 3安装中找不到任何这样的文件.如果答案仍然是这些文件,它们在哪里存储在Sublime 3中?

roxygen2 sublimetext3

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