小编mat*_*fee的帖子

如何在原型上定义setter/getter

编辑2016年10月:请注意这个问题是在2012年提出的.每个月左右有人添加一个新的答案或评论反驳答案,但这样做没有意义,因为问题可能已经过时(记住,这是Gnome Javascript编写gnome-shell扩展,而不是浏览器的东西,这是非常具体的).

按照我之前关于如何在Javascript中进行子类化的问题,我正在创建一个超类的子类,如下所示:

function inherits(Child,Parent) {
    var Tmp = function {};
    Tmp.prototype = Parent.prototype;
    Child.prototype = new Tmp();
    Child.prototype.constructor = Child;
}
/* Define subclass */
function Subclass() {
    Superclass.apply(this,arguments);
    /* other initialisation */
}
/* Set up inheritance */
inherits(Subclass,Superclass);
/* Add other methods */
Subclass.prototype.method1 = function ... // and so on.
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何使用这种语法在原型上定义一个setter/getter?

我曾经做过:

Subclass.prototype = {
    __proto__: Superclass.prototype,
    /* other methods here ... */

    get myProperty() {
        // code. …
Run Code Online (Sandbox Code Playgroud)

javascript getter

73
推荐指数
4
解决办法
5万
查看次数

预处理或后处理的氧气片段

是否有一些机制可以转换roxygen看到的评论,最好是在进行roxygen-> rd转换之前?

例如,假设我有:

#' My function. Does stuff with numbers.
#'
#' This takes an input `x` and does something with it.
#' @param x a number.
myFunction <- function (x) {
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我想在roxygen解析之前对注释进行一些转换,例如用反引号替换所有实例\code{}.即:

preprocess <- function (txt) {
    gsub('`([^ ]+)`', '\\\\code{\\1}', txt)
}
# cat(preprocess('Takes an input `x` and does something with it'.))
# Takes an input \code{x} and does something with it.
Run Code Online (Sandbox Code Playgroud)

我可以preprocess以某种方式进入roxygen,以便它会在之前(或者在这种情况下工作之后)在doclet上运行它吗?roxygen会生成它的文档吗?

我不想在我的.r文件中进行永久性的查找替换.正如你可能从我的例子中猜到的那样,我的目标是在我的roxygen评论中提供一些基本的降价支持,因此希望保留我的.r文件以保持可读性(并以\code{..}编程方式插入内容).

如果我只是写我自己的版本roxygenise,运行preprocess …

r roxygen2

68
推荐指数
1
解决办法
559
查看次数

使用`geom_line()`,X轴是因子

假设我有一个数据帧:

hist <- data.frame(date=Sys.Date() + 0:13,
                   counts=1:14)
Run Code Online (Sandbox Code Playgroud)

我想用工作日绘制总计数,使用一条线连接点.以下是每个值的要点:

hist <- transform(hist, weekday=factor(weekdays(date),
                                       levels=c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')))
ggplot(hist, aes(x=weekday, y=counts)) + geom_point(stat='summary', fun.y=sum)
Run Code Online (Sandbox Code Playgroud)

当我尝试用line(geom_line())连接它们时,ggplot抱怨每组只有一个数据观察,因此无法在这些点之间画一条线.

我理解这一点 - 它试图为每个工作日绘制一条线(因子级别).

我怎样才能让ggplot假装(仅限于该行的目的)工作日是数字?也许我必须有另一个列day_of_week,星期一是0,星期二是1,等等?

r ggplot2

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

在`menu`中指定monospace字体

语言:R.问题:我可以为menu(..,graphics=T)函数指定固定宽度字体吗?

说明:

我最近问了这个问题,关于如何让用户以交互方式选择一行数据框:

df <- data.frame(a=c(9,10),b=c('hello','bananas'))
df.text <- apply( df, 1, paste, collapse=" | " )
menu(df.text,graphics=T)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我想|排队.他们现在不在; 很公平,我没有填充相同宽度的列.所以我format用来使每一列都达到相同的宽度(稍后我会编写代码来自动确定每列的宽度,但是现在让我们忽略它):

df.padded <- apply(df,2,format,width=8)
df.padded.text <- apply( df.padded, 1, paste, collapse=" | ")
menu( df.padded.text,graphics=T )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

看看它如何仍然不稳定?然而,如果我看一下df.padded,我得到:

> df.padded
     a            b           
[1,] " 9        " "hello     "
[2,] "10        " "bananas   "
Run Code Online (Sandbox Code Playgroud)

所以每个单元格肯定都填充到相同的长度.

原因可能是因为它的默认字体(在我的系统上,无论如何,Linux)不是固定宽度.

所以我的问题是: 我可以为menu(..,graphics=T)函数指定固定宽度字体吗?

更新

@RichieCotton注意到,如果你看一下menugraphics=T它调用select.list,进而调用tcltk::tk_select.list.

所以看起来我必须为此修改tcltk选项.来自@jverzani: …

r fixed-width monospace

48
推荐指数
1
解决办法
1430
查看次数

使用R中的XLSX包在Excel中打印data.frame时出错

数据框是可见的,没有任何错误.但是当使用包XLSX的write.xlsx函数打印相同时,它会给出错误.

Error in .jcall(cell, "V", "setCellValue", value) : 
  method setCellValue with signature ([D)V not found.
Run Code Online (Sandbox Code Playgroud)

data.frame的输入看起来像:

Timestamp         qs          pqs        logqs         es         p_imp      dep    r_dep       agg_rtn
               (time)      (dbl)        (dbl)        (dbl)      (dbl)         (dbl)    (dbl)    (dbl)         (dbl)
1 2015-05-04 09:29:59 0.05788732 0.0007478696 0.0007478545 0.09633803 -0.0446830986 3533.518 274079.9 -0.0006432937
2 2015-05-04 10:00:00 0.04948394 0.0006362707 0.0006362707 0.07586009  0.0088016055 2416.431 187953.1  0.0000000000
3 2015-05-04 10:30:00 0.05554795 0.0007142532 0.0007142532 0.06417808 -0.0002739726 3245.574 252422.0  0.0000000000
4 2015-05-04 10:59:59 0.04863014 0.0006194244 0.0006194244 0.08434442  0.0024951076 3563.401 279503.9  0.0000000000
5 2015-05-04 …
Run Code Online (Sandbox Code Playgroud)

excel r xlsx

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

以编程方式关闭由`View(x)`创建的窗口

我正在使用View以下方法查看R中的数据框:

my_df <- data.frame(a=1:10, b=letters[1:10])
View(my_df)
Run Code Online (Sandbox Code Playgroud)

我现在想以编程方式关闭生成的窗口(而不是单击X按钮).

我怎么能这样做?graphics.off不起作用,因为它不是图形设备.看View代码,内部函数dataviewer用于显示窗口,但我不确定它在后台使用了什么(tcltk?)所以我不知道如何关闭窗口.


重新评论我为什么要这样做.

我基本上在脚本中执行用户检查步骤,询问用户是否将数据帧的片段和相应的图像放在一起.它是这样的:

for (i in 1:heaps) {

    1. View(a snippet of a big dataframe)
    2. show an image

    3. readline('Is this OK? [Y/N]: ') (store the i for which it's not OK)

    4. close the image window (graphics.off()), close the View(..) window.
}
Run Code Online (Sandbox Code Playgroud)

我基本上想要减少用户交互,盯着图像和数据帧片段并键入Y或N,这样他们就不必手动关闭i循环中的每个数据帧窗口.

(我正在通过这个验证自己处理并正在处理200个View(snippet)窗口,我没有打扰关闭D:.另外,注意到窗口的打开窃取键盘焦点远离提示,所以我键入Y/N并不像我想的那么快.但我只需要这样做一次,所以它现在就做了.我很好奇这个问题的答案,但下次还是这样.

r

28
推荐指数
1
解决办法
2048
查看次数

knitr - 从'purl(...)`中排除块?

当我对文档进行purl/tangle以将R块提取到脚本中时,有什么方法可以:

  • 排除一个任意的块(按名称说)?
  • 如果没有,排除一个块if eval=F(或者我可以定义一个chunk hook/option include=F)?

例如,假设我有以下Rmd:

```{r setup, echo=F}
library(MASS)
```
First, we perform the setup (assume for some reason I need to evaluate `setup`
silently before I wish to display the chunk to the user, hence the repetition)
```{r setup, eval=F}
```

Here's the function I've been explaining:
```{r function}
plus <- function (a, b) a + b
```

And here's an example of its use:
```{r example}
plus(1, 2)
```
Run Code Online (Sandbox Code Playgroud)

纠结的脚本看起来像这样:

## @knitr setup, echo=F …
Run Code Online (Sandbox Code Playgroud)

r knitr

19
推荐指数
2
解决办法
2101
查看次数

从经度/纬度确定UTM区域(转换)

我正在编写一个程序,它需要一些纬度/经度,并且我将它们内部转换为UTM,以便以米为单位进行一些计算.

纬度/长度点的范围非常小 - 约200米x 200米.它们几乎总是可以依赖于单个UTM区域(除非你不幸并且跨越区域的边界).

但是,纬度/长度所在的区域不受限制.有一天,这个项目可能会针对澳大利亚的人们运行(哦,甚至一个州还有多少个区域,以及这已经导致我多少痛苦......),以及墨西哥人民的另一天.

我的问题是 - 有没有办法确定特定长/纬度所在的区域,以便它可以被送入转换库(我目前使用proj4和R包rgdal).

我的语言是R,但答案不一定是 - 也许只是一个简单的计算,或者我可以将系统调用嵌入到projexectuable中.

干杯.

r utm latitude-longitude coordinate-transformation

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

vim或sed/awk/etc - 用空格填充所有行到固定宽度

如何将文件的每一行填充到一定的宽度(比如63个字符宽),如果需要填充空格?

现在,让我们假设所有行都保证少于63个字符.

我使用vim,并希望有一种方法在那里(有某种printf %63s current_line命令?),我可以选择我想要应用填充的行.

但是,我当然愿意使用sed,awk或某种linux工具来完成这项工作.

干杯.

vim awk sed

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

numpy recarray可变长度的字符串

是否可以初始化一个将保持字符串的numpy重新排列,而不事先知道字符串的长度?

作为一个(人为的)例子:

mydf = np.empty( (numrows,), dtype=[ ('file_name','STRING'), ('file_size_MB',float) ] )
Run Code Online (Sandbox Code Playgroud)

问题是我在用信息填充之前构建我的recarray,我不一定知道file_name提前的最大长度.

我的所有尝试都会导致字符串字段被截断:

>>> mydf = np.empty( (2,), dtype=[('file_name',str),('file_size_mb',float)] )
>>> mydf['file_name'][0]='foobarasdf.tif'
>>> mydf['file_name'][1]='arghtidlsarbda.jpg'
>>> mydf
array([('', 6.9164002347457e-310), ('', 9.9413127e-317)], 
      dtype=[('file_name', 'S'), ('file_size_mb', '<f8')])
>>> mydf['file_name']
array(['f', 'a'], 
      dtype='|S1')
Run Code Online (Sandbox Code Playgroud)

(顺便说mydf['file_name']一句,为什么显示'f'和'a'同时mydf显示''和''?)

同样,如果我用型(比如说)初始化|S10file_name这种事情会在长度10截断.

我能找到的唯一类似的问题就是这个问题,但是这会先验地计算出合适的字符串长度,因此与我的字符串长度并不完全相同(因为我事先并不知道).

除了初始化file_name(例如)|S9999999999999(即一些荒谬的上限)之外,还有其他选择吗?

python numpy recarray

17
推荐指数
1
解决办法
7331
查看次数