小编JD *_*ong的帖子

用R开发地理专题地图

R中有很多包用于各种空间分析.这可以在CRAN任务视图中看到:空间数据分析.这些软件包数量众多且各种各样,但我想做的只是一些简单的专题图.我有县和州FIPS代码的数据,我有县和州边界的ESRI形状文件和随附的FIPS代码,允许加入数据.如果需要,形状文件可以很容易地转换为其他格式.

那么用R创建专题地图最直接的方法是什么?

这张地图看起来像是用ESRI Arc产品创建的,但这是我想用R做的事情:

alt text http://www.infousagov.com/images/choro.jpg 从这里复制的地图.

r map geolocation geospatial

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

将字符串切割成固定宽度字符元素的向量

我有一个包含文本字符串的对象:

x <- "xxyyxyxy"
Run Code Online (Sandbox Code Playgroud)

我想把它拆分成一个向量,每个元素包含两个字母:

[1] "xx" "yy" "xy" "xy"
Run Code Online (Sandbox Code Playgroud)

看起来strsplit应该是我的票,但由于我没有正则表达式foo,我无法弄清楚如何使这个功能将字符串按照我想要的方式切成块.我该怎么做?

r strsplit

53
推荐指数
7
解决办法
6万
查看次数

捕获错误然后分支逻辑

如果出现错误情况,如何编写允许我在代码中执行不同路径的R代码?我正在使用一个往往会抛出错误的函数.当它遇到错误条件时,我想执行一个不同的功能.这是一个具体的例子:

require(SuppDists)
parms <- structure(list(gamma = -0.841109044800762, delta = 0.768672140584442, 
    xi = -0.359199299528801, lambda = 0.522761187947026, type = "SB"), .Names = c("gamma", 
"delta", "xi", "lambda", "type"))
pJohnson(.18, parms)
Run Code Online (Sandbox Code Playgroud)

pJohnson函数应该失败并出现以下错误:

 Error in pJohnson(0.18, parms) :
 Sb values out of range.
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令使错误变为静默:

try( pJohnson(.18, parms), silent=T)
Run Code Online (Sandbox Code Playgroud)

但我真正想要做的是执行的功能alternativeFunction(),如果pJohnson(.18, parms)返回错误.

似乎该withCallingHandlers()函数应该帮助我,但我无法弄清楚如何捕获错误并使其alternativeFunction()在错误条件下运行.

error-handling r

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

R:加快"分组"操作

我有一个模拟,有一个巨大的聚合,并在中间组合步骤.我使用plyr的ddply()函数对这个过程进行了原型设计,这对我的大部分需求非常有用.但是我需要这个聚合步骤更快,因为我必须运行10K模拟.我已经在并行缩放模拟,但如果这一步更快,我可以大大减少我需要的节点数量.

这是对我要做的事情的合理简化:

library(Hmisc)

# Set up some example data
year <-    sample(1970:2008, 1e6, rep=T)
state <-   sample(1:50, 1e6, rep=T)
group1 <-  sample(1:6, 1e6, rep=T)
group2 <-  sample(1:3, 1e6, rep=T)
myFact <-  rnorm(100, 15, 1e6)
weights <- rnorm(1e6)
myDF <- data.frame(year, state, group1, group2, myFact, weights)

# this is the step I want to make faster
system.time(aggregateDF <- ddply(myDF, c("year", "state", "group1", "group2"),
                     function(df) wtd.mean(df$myFact, weights=df$weights)
                                 )
           )
Run Code Online (Sandbox Code Playgroud)

所有提示或建议表示赞赏!

performance r plyr

36
推荐指数
5
解决办法
8099
查看次数

使用bcp实用程序和SQL Server 2008将表导出到具有列标题(列名称)的文件

我已经看到一些hacks试图让bcp实用程序导出列名和数据.如果我所做的只是将表转储到文本文件中,那么使用bcp添加列标题的最简单的方法是什么?

这是我目前使用的bcp命令:

bcp myschema.dbo.myTableout myTable.csv /SmyServer01 /c /t, -T
Run Code Online (Sandbox Code Playgroud)

sql-server csv bcp header

35
推荐指数
6
解决办法
18万
查看次数

在R中的数据帧的每一行上执行plyr操作

我喜欢plyr语法.任何时候我必须使用*apply()命令之一,我最终踢狗并进行为期3天的弯曲.因此,为了我的狗和我的肝脏,在数据帧的每一行上执行ddply操作的简洁语法是什么?

这是一个适用于简单案例的例子:

x <- rnorm(10)
y <- rnorm(10)
df <- data.frame(x,y)
ddply(df,names(df) ,function(df) max(df$x,df$y))
Run Code Online (Sandbox Code Playgroud)

这很好,给了我想要的东西.但是如果事情变得更复杂,这会导致plyr变得时髦(并且不像Bootsy Collins)因为plyr正在咀嚼从所有那些浮点数值中取出"等级"

x <- rnorm(1000)
y <- rnorm(1000)
z <- rnorm(1000)
myLetters <- sample(letters, 1000, replace=T)
df <- data.frame(x,y, z, myLetters)
ddply(df,names(df) ,function(df) max(df$x,df$y))
Run Code Online (Sandbox Code Playgroud)

在我的盒子上咀嚼几分钟,然后返回:

Error: memory exhausted (limit reached?)
In addition: Warning messages:
1: In paste(rep(l, each = ll), rep(lvs, length(l)), sep = sep) :
  Reached total allocation of 1535Mb: see help(memory.size)
2: In paste(rep(l, each = ll), rep(lvs, length(l)), sep = sep) :
  Reached …
Run Code Online (Sandbox Code Playgroud)

r plyr

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

在R中隐藏个人功能

我的.Rprofile中有一些便利函数,比如这个用于返回内存中对象大小的方便函数.有时我喜欢在不重新启动的情况下清理我的工作区,我这样做rm(list=ls())会删除所有用户创建的对象和我的自定义函数.我真的很想不吹嘘我的自定义功能.

解决这个问题的一种方法似乎是使用我的自定义函数创建一个包,以便我的函数最终在他们自己的命名空间中.这不是特别难,但有没有更简单的方法来确保自定义函数不被rm()杀死?

namespaces r

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

使用复合(分层)索引从Pandas数据框中选择行

我怀疑这是微不足道的,但我还没有发现让我根据分层键的值从Pandas数据帧中选择行的咒语.因此,例如,假设我们有以下数据帧:

import pandas
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
                       'group2': ['c','c','d','d','d','e'],
                       'value1': [1.1,2,3,4,5,6],
                       'value2': [7.1,8,9,10,11,12]
})
df = df.set_index(['group1', 'group2'])
Run Code Online (Sandbox Code Playgroud)

看起来像我们期望的那样:

在此输入图像描述

如果df未在group1上编入索引,我可以执行以下操作:

df['group1' == 'a']
Run Code Online (Sandbox Code Playgroud)

但是这个带有索引的数据帧失败了.所以也许我应该把它想象成一个带有分层索引的Pandas系列:

df['a','c']
Run Code Online (Sandbox Code Playgroud)

不.那也失败了.

那么如何选择所有行:

  1. group1 =='a'
  2. group1 =='a'&group2 =='c'
  3. group2 =='c'
  4. group1 in ['a','b','c']

python multi-index dataframe pandas

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

R:确定脚本是在Windows还是Linux中运行

是否有一种简单的方法可以通过编程方式确定是否在Windows与Linux中执行R脚本?

r multiplatform

32
推荐指数
4
解决办法
6244
查看次数

R返回所有因子的函数

我正常的搜索foo让我失望.我正在尝试找到一个R函数,它返回整数的所有因子.至少有2个包含factorize()函数的包:gmp和conf.design,但这些函数只返回素因子.我想要一个能够返回所有因子的函数.

显然,搜索这个很困难,因为R有一个叫做因子的结构,它会在搜索中产生很多噪音.

r factorization

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