小编Mat*_*eck的帖子

将data.frame转换为列表列表

如何转换data.frame

df <- data.frame(id=c("af1", "af2"), start=c(100, 115), end=c(114,121))
Run Code Online (Sandbox Code Playgroud)

到列表列表

LoL <- list(list(id="af1", start=100, end=114), list(id="af2", start=115, end=121))
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西

not.LoL <- as.list(as.data.frame(t(df)))
Run Code Online (Sandbox Code Playgroud)

而且我真的不确定在此之后我最终会得到什么,但这不太对劲.我的要求是我可以start通过命令访问第一个

> LoL[[1]]$start
[1] 100
Run Code Online (Sandbox Code Playgroud)

not.LoL我目前有给我以下错误:

> not.LoL[[1]]$start
Error in not.LoL[[1]]$start : $ operator is invalid for atomic vectors
Run Code Online (Sandbox Code Playgroud)

非常感谢解释和/或解决方案.

编辑:我应该清楚地说明这里的"id"实际上是非唯一的 - 在一个ID下可以有多个元素.所以我可以使用不依赖于唯一ID的解决方案split.

r dataframe

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

将新值添加到数组哈希的简写

下面是我想在某种循环中构建数组哈希时必须编写的代码块的概括.

#get value and key that I want to use
my $value = getvalue();
my $key = getKey();

#add value to hash using key
if($hash_of_arrays{$key}){
    push(@{$hash_of_arrays{$key}}, $value);
}
else{
    $hash_of_arrays{$key} = [$value];
}
Run Code Online (Sandbox Code Playgroud)

为这样一个简单的任务编写if语句非常繁琐,但需要完成它,因为在哈希中未定义其键时推送一个值会导致问题.我只是想知道是否有任何简写来写这个 - 我不必写$hash_of_arrays{$key}三次.

perl

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

将数组中的值从一行中取消引用到声明的变量

要从函数调用中检索参数,我通常会这样做

use strict;
use warnings;

foo([1,2],[3,4]);

sub foo{
    my ($x, $y) = @_;
    ...
}
Run Code Online (Sandbox Code Playgroud)

在示例中,$ x和$ y现在分别引用了一个数组.如果我想轻易使用这些数组中的变量,我首先取消引用它们.

...
my ($x1, $x2) = @{$x}[0,1];
# ...same for $y
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以取消引用@_(或者,实际上是任何其他数组)中的参数,并将它们返回到一行中声明的变量列表中?

perl reference dereference

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

过滤单列数据帧

我试图过滤只有一列的数据框.这导致向量返回如下:

single.c <- data.frame(col1=c(1,2,3,4,5), row.names=C("r1","r2","r3","r4","r5"))
single.c[single.c$col1 > 2,]

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

我真正想要的是返回的数据,就像多列数据帧一样:

multi.c <- data.frame(col1=c(1,2,3,4,5), col2=c(1,2,3,4,5), row.names=c("r1","r2","r3","r4","r5"))
multi.c[multi.c$col2 > 2,]

   col1 col2
r3    3    3
r4    4    4
r5    5    5
Run Code Online (Sandbox Code Playgroud)

如果没有其他列,我可以看到返回向量是有意义的,但通常我想看看哪些行也给出了结果.为什么会发生这种情况,是否有一种简单的方法可以保持结果中的数据框形状,包括rownames?

r dataframe

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

重塑包装遮盖,防止熔化命名柱

我有一个脚本,需要两个reshapereshape2库.我知道这是不好的做法,但我认为plyr(或我正在使用的另一个图书馆) Vennerable正在加载reshape,我个人reshape2在很多地方使用过.

问题是reshape2by 的屏蔽reshape会导致melt函数出现问题

# Example data frame
df <- data.frame(id=c(1:5), a=c(rnorm(5)), b=c(rnorm(5)))

# With just reshape2, variable and value columns are labelled correctly
library(reshape2)
melt(df, measure.vars=c("a", "b"), variable.name="type", value.name="distance")
   id type   distance
1   1    a -2.0233666
2   2    a  0.4625188
3   3    a -2.8688127
4   4    a  0.8151644
5   5    a -0.4574464
6   1    b  1.3197784
7   2    b  1.6213146
8   3 …
Run Code Online (Sandbox Code Playgroud)

r plyr reshape melt reshape2

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

正确地将"翻转"表读入data.frame

我有一个制表符分隔的文件,如下所示:

AG-AG   AG-CA   AT-AA   AT-AC   AT-AG   ...
0.0142180094786 0.009478672985781   0.0142180094786 0.4218009478672 ...
Run Code Online (Sandbox Code Playgroud)

当我使用read.table将其读入R时,我得到:

nc.tab <- read.table("./percent_splice_pair.tab", sep="\t", header=TRUE)
     AG.AG       AG.CA      AT.AA     AT.AC      AT.AG   ... 
1 0.01421801 0.009478673 0.01421801 0.4218009 0.03317536 ...
Run Code Online (Sandbox Code Playgroud)

这对我来说有点尴尬,因为我更习惯于处理数据,如果它像这样:

splice.pair    counts
AG.AG          0.01421801
AG.CA          0.009478673
AT.AA          0.01421801
AT.AG          0.03317536
...            ...
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试将表格强制转换为这样的数据框(使用data.frame())会导致非常奇怪的结果.我无法弄清楚如何获取表格的每一行作为一个简单的列表,然后我可以将其用作数据框的列.colnames(nc.tab)适用于标题,但nc.tab[1,]只需再次给我表+标题.我错过了一些明显的东西吗

- 编辑 -

虽然@Andrie的答案给了我所需的数据框架,但我还是需要做一些额外的工作来将计数值强制成数值,这样它们才能在ggplot中正常工作:

nc.tab <- read.table("./percent_splice_pair.tab", header=FALSE, sep="\t")
nc.mat <- t(as.matrix(nc.tab))
sp <- as.character(nc.tab[,2])
c <- as.numeric(as.character(nc.tab[,2]))
nc.dat <- data.frame(Splice.Pair=sp, count=c)

   Splice.Pair       count
1        AG-AG 0.014218009
2        AG-CA …
Run Code Online (Sandbox Code Playgroud)

r dataframe

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

ggplot2条形图的子集data.frame

我有以下数据:

    Splice.Pair  proportion
1         AA-AG 0.010909091
2         AA-GC 0.003636364
3         AA-TG 0.003636364
4         AA-TT 0.007272727
5         AC-AC 0.003636364
6         AC-AG 0.003636364
7         AC-GA 0.003636364
8         AC-GG 0.003636364
9         AC-TC 0.003636364
10        AC-TG 0.003636364
11        AC-TT 0.003636364
12        AG-AA 0.010909091
13        AG-AC 0.007272727
14        AG-AG 0.003636364
15        AG-AT 0.003636364
16        AG-CC 0.003636364
17        AG-CT 0.007272727
...       ...   ...
Run Code Online (Sandbox Code Playgroud)

我想得到一个条形图,可视化每个接头对的比例,但仅适用于比例超过,例如0.004的接头对.我尝试了以下方法:

nc.subset <- subset(nc.dat, proportion > 0.004)
qplot(Splice.Pair, proportion, data=nc.dat.subset,geom="bar", xlab="Splice Pair", ylab="Proportion of total non-canonical splice sites") + coord_flip();
Run Code Online (Sandbox Code Playgroud)

但这只是给我一个条形图,其中Y轴上的所有接头对,除了过滤掉的接头对缺少条形图. 在此输入图像描述

我不知道发生了什么让所有类别仍然存在:s

r ggplot2

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

从自定义函数实现几何选项

我倾向于最终得到令人难以置信的复杂ggplot图形和大量自定义,所以我很自然地将这些作为函数添加到我的代码中,以便我可以轻松地重用它们。当我想使用我的自定义函数之一但稍微调整它时会出现问题,例如删除或添加美学到我已经在函数内部定义的几何图形。我的选择是:

  1. 创建一个几乎重复的函数,但添加了特定的更改,并更改了函数名称以反映此或

  2. 向函数添加参数以更改ggplot函数内部的构造方式

我尽量选择 2. 因为它明显减少了我脚本中的冗余和混乱。

然而,有时 2. 在函数内部几乎退化为 1. 通过强制我重新输入包含多个参数的整个 geom 函数。我将举一个非常简单的例子,记住我拥有的功能非常复杂,值得我在这里做的思考:

gg_custom_point <- function(df, xvar, yvar, gvar=NA){
    g <- ggplot(df)

    if(is.na(gvar)){
        # do geom without colour
        g <- g + geom_point(aes_string(x=xvar, y=yvar))
    }
    else{
        # do geom with colour - mostly redundant code
        g <- g + geom_point(aes_string(x=xvar, y=yvar, colour=gvar))
    }
    return(g)
}

# I can use the same function to make slightly different custom plots
gg_custom_point(mtcars, "wt", "mpg")
gg_custom_point(mtcars, "wt", "mpg", "qsec")
Run Code Online (Sandbox Code Playgroud)

问题是我不得不重新打字, …

arguments r function ggplot2

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

将子实体持久化操作级联到其父实体

OneToMany我与使用 Hibernate 注释设置的两个实体有关联。该关联的实体有一个复合主键,由外键列和另一个标识符Child组成。当我尝试通过保存子实体将提交级联到父级时,这似乎会导致“引用完整性约束违规”。parentchildName

我创建了一个简单的问题工作示例,该示例从我使用这种关系建模的实际场景中抽象出来,但这意味着我知道问题是由于这种关联和使用复合主键造成的。

为什么我不能通过保存子实体来提交两个实体?为什么它违反了外键约束?

主要测试方法*:

// Create some detached entities
Parent p = new Parent();
p.setName("Fooson");

// New child id
Child.ChildPK pk = new Child.ChildPK();
pk.setParentName(p);
pk.setChildName("Barty");     

// Set id to new Child
Child c = new Child();
c.setChildPK(pk);

// Add child to parent
p.getChildren().add(c);

// Saving the parent
// service.parentDao.save(p); // if this is uncommented, it works fine

// Cascade child and associated parents in one transaction
service.childDao.save(c); // ConstraintViolationException
Run Code Online (Sandbox Code Playgroud)

孩子.java

@Entity
@Table(name="Child") …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa hibernate-mapping composite-primary-key

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

直接将参数更改为子例程

如果我能以shift,push和其他内置子程序的工作方式使用子程序,它会使我的脚本中的事情变得更容易:它们都可以直接更改传递给它的变量,而无需返回更改.

当我尝试这样做时,变量在某些时候被复制,我似乎只是在改变副本.我知道这对于引用会很好,但它甚至会发生在数组和散列中,我觉得我只是将我正在处理的变量传递给sub,以便可以对它进行更多的工作:

@it = (10,11);
changeThis(@it);
print join(" ", @it),"\n"; #prints 10 11 but not 12

sub changeThis{
    $_[2] = 12;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我知道这不是最好的做法,但就我而言,它会非常方便.

perl

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

具有最小和最大标签的漂亮轴

我想绘制一个简单的条形图,如下所示:

test <- data.frame(y=c(1,3,53,10,30,35,50), x=c(1:7))
barplot(test$y, names.arg=test$x)
Run Code Online (Sandbox Code Playgroud)

结果图

我的问题是,如果最大值是一些"不合适"的数字,y轴的延伸距离不够远.更好的是,如果轴延伸超过最大值并完成一些大于最大值的"漂亮"值.

给定一个随机数据集(即这是一个函数),有一个简单的方法吗?

r axis-labels

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