R中有很多包用于各种空间分析.这可以在CRAN任务视图中看到:空间数据分析.这些软件包数量众多且各种各样,但我想做的只是一些简单的专题图.我有县和州FIPS代码的数据,我有县和州边界的ESRI形状文件和随附的FIPS代码,允许加入数据.如果需要,形状文件可以很容易地转换为其他格式.
那么用R创建专题地图最直接的方法是什么?
这张地图看起来像是用ESRI Arc产品创建的,但这是我想用R做的事情:
alt text http://www.infousagov.com/images/choro.jpg 从这里复制的地图.
我有一个包含文本字符串的对象:
x <- "xxyyxyxy"
Run Code Online (Sandbox Code Playgroud)
我想把它拆分成一个向量,每个元素包含两个字母:
[1] "xx" "yy" "xy" "xy"
Run Code Online (Sandbox Code Playgroud)
看起来strsplit应该是我的票,但由于我没有正则表达式foo,我无法弄清楚如何使这个功能将字符串按照我想要的方式切成块.我该怎么做?
如果出现错误情况,如何编写允许我在代码中执行不同路径的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()在错误条件下运行.
我有一个模拟,有一个巨大的聚合,并在中间组合步骤.我使用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)
所有提示或建议表示赞赏!
我已经看到一些hacks试图让bcp实用程序导出列名和数据.如果我所做的只是将表转储到文本文件中,那么使用bcp添加列标题的最简单的方法是什么?
这是我目前使用的bcp命令:
bcp myschema.dbo.myTableout myTable.csv /SmyServer01 /c /t, -T
Run Code Online (Sandbox Code Playgroud) 我喜欢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) 我的.Rprofile中有一些便利函数,比如这个用于返回内存中对象大小的方便函数.有时我喜欢在不重新启动的情况下清理我的工作区,我这样做rm(list=ls())会删除所有用户创建的对象和我的自定义函数.我真的很想不吹嘘我的自定义功能.
解决这个问题的一种方法似乎是使用我的自定义函数创建一个包,以便我的函数最终在他们自己的命名空间中.这不是特别难,但有没有更简单的方法来确保自定义函数不被rm()杀死?
我怀疑这是微不足道的,但我还没有发现让我根据分层键的值从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)
不.那也失败了.
那么如何选择所有行:
是否有一种简单的方法可以通过编程方式确定是否在Windows与Linux中执行R脚本?
我正常的搜索foo让我失望.我正在尝试找到一个R函数,它返回整数的所有因子.至少有2个包含factorize()函数的包:gmp和conf.design,但这些函数只返回素因子.我想要一个能够返回所有因子的函数.
显然,搜索这个很困难,因为R有一个叫做因子的结构,它会在搜索中产生很多噪音.
r ×8
plyr ×2
bcp ×1
csv ×1
dataframe ×1
geolocation ×1
geospatial ×1
header ×1
map ×1
multi-index ×1
namespaces ×1
pandas ×1
performance ×1
python ×1
sql-server ×1
strsplit ×1