小编JD *_*ong的帖子

如何避免R中的循环:从列表中选择项目

我可以使用循环解决这个问题,但我正在尝试在向量中思考,所以我的代码将更多R-esque.

我有一个名单.格式为firstname_lastname.我想从这个列表中删除一个只有名字的单独列表.我似乎无法理解如何做到这一点.这是一些示例数据:

t <- c("bob_smith","mary_jane","jose_chung","michael_marx","charlie_ivan")
tsplit <- strsplit(t,"_")
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

> tsplit
[[1]]
[1] "bob"   "smith"

[[2]]
[1] "mary" "jane"

[[3]]
[1] "jose"  "chung"

[[4]]
[1] "michael" "marx"   

[[5]]
[1] "charlie" "ivan"   
Run Code Online (Sandbox Code Playgroud)

我可以使用这样的循环得到我想要的东西:

for (i in 1:length(tsplit)){
    if (i==1) {t_out <- tsplit[[i]][1]} else{t_out <- append(t_out, tsplit[[i]][1])} 
}
Run Code Online (Sandbox Code Playgroud)

这会给我这个:

t_out
[1] "bob"     "mary"    "jose"    "michael" "charlie"
Run Code Online (Sandbox Code Playgroud)

那么我怎么能没有循环呢?

r list vector strsplit

31
推荐指数
5
解决办法
3万
查看次数

在R中显示状态消息

我想编写一个向用户显示状态消息的函数,该消息显示时间,完成百分比和进程的当前状态.我可以处理组合消息,但我想做的事情不仅仅是打印到控制台并让它向上滚动,一个消息接着另一个.我真的很喜欢在不滚动message()和没有任何图形的情况下更改消息.这可能与R?

message r status statusbar

30
推荐指数
4
解决办法
2万
查看次数

绘制超过200万行平面文件数据的最快速,最灵活的方式?

我在flatfile中收集一些系统数据,其格式如下:

YYYY-MM-DD-HH24:MI:SS DD1 DD2 DD3 DD4
Run Code Online (Sandbox Code Playgroud)

其中DD1-DD4是四项数据.该文件的一个示例是:

2011-02-01-13:29:53 16 8 7 68
2011-02-01-13:29:58 13 8 6 110
2011-02-01-13:30:03 26 25 1 109
2011-02-01-13:30:08 13 12 1 31
2011-02-01-13:30:14 192 170 22 34
2011-02-01-13:30:19 16 16 0 10
2011-02-01-13:30:24 137 61 76 9
2011-02-01-13:30:29 452 167 286 42
2011-02-01-13:30:34 471 177 295 11
2011-02-01-13:30:39 502 192 309 10
Run Code Online (Sandbox Code Playgroud)

该文件超过200万行,每五秒钟有一个数据点.

我需要绘制这些数据,以便能够从中获得意义.

我试过的

目前我已尝试使用各种unix工具gnuplot和rrdtool(awk,sed等).这两种方法都有效,但每次我想以不同的方式查看数据时,似乎都需要大量的切割和重新编辑数据.我的直觉是rrdtool是正确的方法,但目前我正在努力将数据快速地加入其中,部分原因是因为我必须将我的时间戳转换为Unix时代.我的理解是,如果我决定我想要一个新的聚合粒度,我必须重建rrd(这对于实时收集是有意义的,但不是像这样的追溯加载).这些事情让我觉得我可能正在使用错误的工具.

将数据收集到平面文件是固定的 - 例如,我无法将集合直接传递到rrdtool.

我的问题

我希望人们对制图的最佳方式有所了解.我有这些要求:

  1. 它应该尽可能快地创建一个图形(不仅仅是渲染,而是设置为渲染)
  2. 它应该尽可能灵活 - 我需要使用图表来计算出数据的最佳粒度(5秒可能过于细化)
  3. 它应该能够在必要时聚合(MAX/AVG/etc)
  4. 它应该是可重复的,并且当它们进入时会有新的数据文件
  5. 理想情况下,我希望能够在本周与DD1重叠DD1与DD2或DD1
  6. Unix或Windows,不在乎.首选*nix虽然:-)

有什么建议?

r graph gnuplot flat-file rrdtool

29
推荐指数
3
解决办法
4414
查看次数

R:从命名空间调用函数

我正在尝试改变R中包中的一些命令的功能.很容易看到命令的来源.但是,该函数调用包命名空间中的其他函数.这些函数不是导出的对象.那我该如何访问它们呢?

具体示例:如何访问copula :: rmvdc中使用的asCall()函数?

require(copula)
copula::rmvdc
getAnywhere("asCall")
Run Code Online (Sandbox Code Playgroud)

所以as.Call()在copula包中存在,但我该如何访问它?

> copula::asCall
Error: 'asCall' is not an exported object from 'namespace:copula'
Run Code Online (Sandbox Code Playgroud)

namespaces r

28
推荐指数
2
解决办法
3万
查看次数

维恩图用R?

除了limma包之外,还有用于在R中进行维恩图的其他包装.

有人有提示吗?

这里有关于用limma包做维恩图的一些注意事项.

r venn-diagram

27
推荐指数
6
解决办法
3万
查看次数

用R来思考向量

我知道R可以最有效地使用向量,并且应该避免循环.我很难教自己用这种方式编写代码.我想了解如何"矢量化"我的代码.下面是为10,000个非唯一的state(st),plan1(p1)和plan2(p2)组合创建10年样本数据的示例:

st<-NULL
p1<-NULL
p2<-NULL
year<-NULL
i<-0
starttime <- Sys.time()

while (i<10000) {
    for (years in seq(1991,2000)) {
        st<-c(st,sample(c(12,17,24),1,prob=c(20,30,50)))
        p1<-c(p1,sample(c(12,17,24),1,prob=c(20,30,50)))
        p2<-c(p2,sample(c(12,17,24),1,prob=c(20,30,50)))    
        year <-c(year,years)
    }
        i<-i+1
}
Sys.time() - starttime
Run Code Online (Sandbox Code Playgroud)

这需要大约8分钟才能在我的笔记本电脑上运行.我最终得到了4个向量,每个向量都有100,000个值,正如预期的那样.如何使用矢量函数更快地完成此操作?

作为旁注,如果我将上面的代码限制为1000循环,它只需要2秒,但10,000需要8分钟.知道为什么吗?

r vector

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

在ggplot2中创建任意窗格

在基本图形中,我可以通过执行以下操作创建4个面板图形窗格:

par(mfrow=c(2,2))
for (i in 1:4){
  plot(density(rnorm(100)))
}
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

我想用ggplot2做同样的事情,但我无法弄清楚如何做到这一点.我不能使用facet,因为我的真实数据,与这个简单的例子不同,是非常不同的结构,我想要两个图表是点图表,两个图表是直方图.如何在ggplot2中创建面板或窗格?

r ggplot2

25
推荐指数
4
解决办法
4815
查看次数

列是否存在以及如何重新排列R数据框中的列

如何在R数据框的中间添加列?我想看看我是否有一个名为"LastName"的列,然后将其添加为第三列(如果它尚不存在).

r

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

ggplot stat_bin2d图中的渐变中断

stat_bin2dggplot2包中创建了一个2d直方图.我想控制颜色渐变中的断点数,以及这些断点所在的位置.我敢肯定我只是忽略了一些小事,但我无法弄清楚如何控制分档中的休息时间.

例:

x <- rnorm(100)^2
y <- rnorm(100)^2
df <- data.frame(x,y)
require(ggplot2)
p <- ggplot(df, aes(x, y)) 
p <- p + stat_bin2d(bins = 20)
p + scale_colour_gradient2(breaks=c(1,2,3,4,5,6))
Run Code Online (Sandbox Code Playgroud)

这会产生:

在此输入图像描述

c(5,10,15)尽管我徒劳地尝试休息,但这个情节只有3次休息c(1,2,3,4,5,6))

任何提示?

r ggplot2

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

在R中的ggplot2中一起使用stat_function和facet_wrap

我试图用ggplot2绘制格子类型数据,然后在样本数据上叠加正态分布,以说明基础数据的正常程度.我想让顶部的正常dist与面板具有相同的均值和stdev.

这是一个例子:

library(ggplot2)

#make some example data
dd<-data.frame(matrix(rnorm(144, mean=2, sd=2),72,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value",  "State_CD")

#This works
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) +  facet_wrap(~State_CD)
print(pg)
Run Code Online (Sandbox Code Playgroud)

这一切都很好,并产生了一个很好的三个数据面板图.如何在顶部添加正常dist?看来我会使用stat_function,但这会失败:

#this fails
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + stat_function(fun=dnorm) +  facet_wrap(~State_CD)
print(pg)
Run Code Online (Sandbox Code Playgroud)

似乎stat_function与facet_wrap功能不相符.我如何让这两个玩得很好?

- - - - - - 编辑 - - - - -

我试图整合下面两个答案中的想法,但我仍然没有:

使用这两个答案的组合我可以一起破解这个:

library(ggplot)
library(plyr)

#make some example data
dd<-data.frame(matrix(rnorm(108, mean=2, sd=2),36,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value",  "State_CD")

DevMeanSt <- ddply(dd, c("State_CD"), function(df)mean(df$Predicted_value)) 
colnames(DevMeanSt) <- c("State_CD", "mean")
DevSdSt <- ddply(dd, c("State_CD"), …
Run Code Online (Sandbox Code Playgroud)

r graph ggplot2

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