我正在尝试使用l的linter扩展SublimeLinter .SublimeLinter在Sublime Text 2中为许多语言提供自动linting.目标是在背景中运行linter并突出显示编码错误或编码风格错误的行.
目前,我正在使用包中的lint功能svTools,它正在工作.然而,结果并不令人满意.linter捕获许多)行或许多}但它没有检测到未定义变量的使用,没有编码风格等.
还有其他选择吗?我知道这次讨论的写作A R皮棉程序,R CMD check和codetools.但是我如何运行R CMD check普通的.r文件而不是包?飞行短绒应该使用哪些选项?还有其他想法吗?
谢谢!
编辑:该lint函数在检测错误的位置时似乎也不是很好,或者它基本上总是指示第1列.例如,在fn = function(...) { ]列中是1而不是]在结尾处.
ps:我知道这个lint函数是checkUsage()... 的包装器
如何检查表达式是否是传递给回调的赋值addTaskCallback?回调有四个参数.传递给回调的第一个参数是"顶级任务的S语言表达式".R手册中的顶级任务回调建议您"检查表达式并确定是否进行了任何分配".但是,我如何能够始终如一地为全球环境中的任何任务做到这一点?我基本上想知道在全局环境中是否添加或更改了任何对象,并且只有在这种情况下才执行我的回调.很容易检查基本的赋值操作,例如<-或者=我不确定循环(这是一个顶级表达式),是否使用<<-运算符的条件或函数或可能的其他方法来更改全局环境中的对象.以下是包含全局环境中的分配的单个顶级操作的一些示例
# loops
for (i in 1:10) x[i] <- i
for (i in 1:10) {
x[i] <- i
y[i] <- i
}
# if conditions
if(cond) x <- rnorm(1000)
if(cond) {
x <- rnorm(1000)
y <- rnorm(1000)
}
# global assignment in loop
fn = function() x <<- rnorm(1000)
fn()
Run Code Online (Sandbox Code Playgroud)
最后是一个检查简单=和<-运算符的基本示例:
eventHandler = function(expr, value, ok, visible) {
if(class(expr) %in% c('=','<-'))
print('assignment!')
# as.character(expr)[2] …Run Code Online (Sandbox Code Playgroud) 如何使用python基于引用键从bibtex文件中删除特定条目?我基本上想要一个带有两个参数的函数(bibtex文件和引用键的路径),并从文件中删除与该键对应的条目.我玩正则表达式但没有成功.我也看了一下bibtex解析器,但这似乎有点矫枉过正.在下面的骨架函数中,决定性的部分是content_modified =.
def deleteEntry(path, key):
# get content of bibtex file
f = open(path, 'r')
content = f.read()
f.close()
# delete entry from content string
content_modified =
# rewrite file
f = open(path, 'w')
f.write(content_modified)
f.close()
Run Code Online (Sandbox Code Playgroud)
这是一个示例bibtex文件(在摘要中有空格):
@article{dai2008thebigfishlittlepond,
title = {The {Big-Fish-Little-Pond} Effect: What Do We Know and Where Do We Go from Here?},
volume = {20},
shorttitle = {The {Big-Fish-Little-Pond} Effect},
url = {http://dx.doi.org/10.1007/s10648-008-9071-x},
doi = {10.1007/s10648-008-9071-x},
abstract = {The big-fish-little-pond effect {(BFLPE)} refers to the theoretical …Run Code Online (Sandbox Code Playgroud) 我开始玩,Rcpp并希望使用该fastLm函数作为一个例子(也因为它对以后的潜在工作很有用).我知道这fastLm是RcppArmadillo包的一部分,但我想用它来编译它sourceCpp.代码可以在这里找到,也在下面.我遇到的第一个问题是,我不能简单地运行sourceCpp("fastLm.cpp")R中安装和加载后Rcpp和RcppArmadillo.我得到了这个错误error: RcppArmadillo.h: No such file or directory,然后是各种各样的东西,我想从那里得到.
第二个问题是,我认为我需要改变一些东西fastLm.cpp.我的变化也在下面,但我确信缺少或错误.我包括#include <Rcpp.h>和using namespace Rcpp;与// [[Rcpp::export]]该功能导出到R和我从改变的参数SEXP,以NumericVector和NumericMatrix.我不明白为什么不起作用,返回值可能有类似的调整?
fastLm.cpp
#include <RcppArmadillo.h>
extern "C" SEXP fastLm(SEXP ys, SEXP Xs) {
Rcpp::NumericVector yr(ys); // creates Rcpp vector from SEXP
Rcpp::NumericMatrix Xr(Xs); // creates Rcpp matrix from SEXP
int n = Xr.nrow(), k = Xr.ncol(); …Run Code Online (Sandbox Code Playgroud) 我在choropleth地图中遇到鼠标悬停事件的问题.我想突出显示边界,以便用户可以看到当前选定的功能.一切正常,期望一些边界更薄或根本不存在,大概是因为它们被渲染到相邻特征的边界之下.这是一个例子:
一些边界是正确的,其他部分更薄,第三部分根本不存在.最近来自Mike Bostock等人的NYT地图解决了这个问题.解决办法是什么?这是我目前的mouseover代码:
.on("mouseover", function(d,i) {
d3.select(this).transition().duration(300)
.style({'stroke-opacity':1,'stroke':'#F00'});
})
.on("mouseout", function(d,i) {
d3.select(this).transition().duration(300)
.style({'stroke-opacity':0.4,'stroke':'#eee'});
})
Run Code Online (Sandbox Code Playgroud) 包中的gTouches函数rgeos测试"几何是否至少有一个共同的边界点,但没有内部点".我正在寻找一种方法来测试"几何具有至少一个共同的边界点",而没有与内部点相关的标准.
这是基本设置:我有两个大多数相互嵌入的shapefile.我想找到文件中的多边形,其中较小的区域位于较大区域的边界.这是一个描述我想要做的事情的图表:
plot(map2, col=NA, border='black', lwd=0.4)
plot(map1, col=NA, border='#666666', lwd=0.2, add=TRUE)
Run Code Online (Sandbox Code Playgroud)

该图显示了纽约史坦顿岛的人口普查区块.其中一个较大区域的绿色突出显示了我想要识别的块.只有那些与较大区域(粗线)共享或跨越边界的人.不是位于较大区域中间的区块.我尝试gTouches(map2,map1, byid=TRUE)在rgeos包中使用with 和其他功能但没有成功.gTouches只返回FALSE可能是因为标准是"几何具有至少一个共同的边界点,但没有内部点".基本上,我正在寻找一种功能,测试"几何形状是否至少有一个共同的边界点",无论内部是什么.
后续问题是我是否可以获得相互边界的长度?
数据:您可以在此处和此处下载两张地图.两者都是rds文件,所以你可以像这样打开它们:
library('rgdal')
library('rgeos')
library('sp')
map1 = readRDS('map1.rds')
map2 = readRDS('map2.rds')
Run Code Online (Sandbox Code Playgroud) 为什么predict不是通用功能?isGeneric('predict')是FALSE,但isGeneric('summary')并isGeneric('print')是TRUE.他们都有方法,可以列出methods('predict')等?因此predict不是这里描述的通用函数(从查看中也很明显class),但仍然根据传递给它的对象(例如predict.lm或predict.glm)调度方法.那么R调度方法有不同的方式吗?如何测试函数是否具有方法以使上述所有示例都为真?是的,我可以测试长度,methods('predict')但是对于没有方法的函数会产生警告.
我玩dplyr了一点,非常喜欢它.我错过了一些东西.在plyr,我能够将函数传递给ddply并重用它.
library('dplyr')
library('plyr')
fn = function(df) {
summarise(df,
count = length(id))
}
ddply(DF1,'group', fn)
ddply(DF2,'group', fn)
Run Code Online (Sandbox Code Playgroud)
因此,我可以将一长串记录应用于多个数据集,而无需复制所有参数summarise.在dplyr,但是,我必须这样做
dplyr::summarise(group_by(DF1,group),
count = length(id))
dplyr::summarise(group_by(DF2,group),
count = length(id))
Run Code Online (Sandbox Code Playgroud)
所以summarise每次都必须重复这些论点.我定义参数列表时会评估带有list('.data'=DF1,'count'=length(id))和do.call不起作用length(id)的参数列表.这有什么解决方案吗?
我一直在使用一个小tab函数,它显示了向量的频率,百分比和累积百分比.输出看起来像这样
Freq Percent cum
ARSON 462 0.01988893 0.01988893
BURGLARY 22767 0.98011107 1.00000000
23229 1.00000000 NA
Run Code Online (Sandbox Code Playgroud)
优秀的dplyr包装促使我更新功能.现在我想知道如何更快地更新版本.这是旧功能
tab = function(x,useNA =FALSE) {
k=length(unique(x[!is.na(x)]))+1
if (useNA) k=k+1
tab=array(NA,c(k,3))
colnames(tab)=c("freq.","prob.","cum.")
useNA=ifelse(useNA,"always","no")
rownames(tab)=names(c(table(x,useNA=useNA),""))
tab[-nrow(tab),1]=table(x,useNA=useNA)
tab[-nrow(tab),2]=prop.table(table(x,useNA=useNA))
tab[,3] = cumsum(tab[,2])
if(k>2) tab[nrow(tab),-3]=colSums(tab[-nrow(tab),-3])
if(k==2) tab[nrow(tab),-3]=tab[-nrow(tab),-3]
tab
}
Run Code Online (Sandbox Code Playgroud)
和新的基于 dplyr
tab2 = function(x, useNA =FALSE) {
if(!useNA) if(any(is.na(x))) x = na.omit(x)
n = length(x)
out = data.frame(x,1) %.%
group_by(x) %.%
dplyr::summarise(
Freq = length(X1),
Percent = Freq/n
) %.%
dplyr::arrange(x)
ids = as.character(out$x)
ids[is.na(ids)] …Run Code Online (Sandbox Code Playgroud) 这是第一个topojson问题.我在渲染地图(纽约市区)时遇到问题,无法弄清楚原因.下面的代码只是这个示例的副本,带有不同的topojson文件.我在这里上传了这个文件.以下是有关我如何创建文件的详细信息.现在,我只是变得混乱.可能原因是topojson文件,但我不知道什么是错的.
ps:我无法将其标记为topojson因为之前未使用过该标记
TopoJSON文件
1)从这里下载shapefile
(在"自治市镇和社区区"下的文件"自治市镇"(左),ArcView Shapefile)
2)使用QGis简化shapefile
3)转换为TopoJSON
ogr2ogr -f geoJSON nybb-geo.json nybb.shp
topojson -o nybb.json nybb-geo.json
Run Code Online (Sandbox Code Playgroud)
HTML/JS代码
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.boundary {
fill: none;
stroke: #000;
stroke-width: .5px;
}
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v0.min.js"></script>
<script>
var width = 960,
height = 500;
var path = d3.geo.path();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("/geo/nybb.json", function(error, topology) {
svg.append("path")
.datum(topojson.object(topology, topology.objects['nybb-geo'].geometries[0]))
.attr("d", path)
.attr("class", "boundary");
}); …Run Code Online (Sandbox Code Playgroud) r ×7
d3.js ×2
dplyr ×2
maps ×2
bibtex ×1
coding-style ×1
data.table ×1
python ×1
rcpp ×1
regex ×1
shapefile ×1
sublimetext ×1
sublimetext2 ×1