如何转换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.
下面是我想在某种循环中构建数组哈希时必须编写的代码块的概括.
#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}三次.
要从函数调用中检索参数,我通常会这样做
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)
我想知道是否有一种方法可以取消引用@_(或者,实际上是任何其他数组)中的参数,并将它们返回到一行中声明的变量列表中?
我试图过滤只有一列的数据框.这导致向量返回如下:
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?
我有一个脚本,需要两个reshape和reshape2库.我知道这是不好的做法,但我认为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) 我有一个制表符分隔的文件,如下所示:
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) 我有以下数据:
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
我倾向于最终得到令人难以置信的复杂ggplot图形和大量自定义,所以我很自然地将这些作为函数添加到我的代码中,以便我可以轻松地重用它们。当我想使用我的自定义函数之一但稍微调整它时会出现问题,例如删除或添加美学到我已经在函数内部定义的几何图形。我的选择是:
创建一个几乎重复的函数,但添加了特定的更改,并更改了函数名称以反映此或
向函数添加参数以更改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)
问题是我不得不重新打字, …
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) 如果我能以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)
有没有办法做到这一点?我知道这不是最好的做法,但就我而言,它会非常方便.
我想绘制一个简单的条形图,如下所示:
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轴的延伸距离不够远.更好的是,如果轴延伸超过最大值并完成一些大于最大值的"漂亮"值.
给定一个随机数据集(即这是一个函数),有一个简单的方法吗?