小编mpe*_*tis的帖子

StringIO和与'with'语句的兼容性(上下文管理器)

我有一些带遗留函数的遗留代码,它将文件名作为参数并处理文件内容.下面是代码的工作传真.

我想要做的是不必使用我生成的一些内容写入磁盘以使用此遗留函数,因此我可以使用StringIO创建对象来代替物理文件名.但是,这不起作用,如下所示.

我认为StringIO是这样的方式.任何人都可以告诉我是否有一种方法可以使用这个遗留函数并在参数中传递一些东西,而不是磁盘上的文件但可以通过遗留函数对待它?遗留函数确实让with上下文管理器对filename参数值进行处理.

我在谷歌遇到的一件事是:http://bugs.python.org/issue1286,但这对我没有帮助......

from pprint import pprint
import StringIO

    # Legacy Function
def processFile(filename):
    with open(filename, 'r') as fh:
        return fh.readlines()

    # This works
print 'This is the output of FileOnDisk.txt'
pprint(processFile('c:/temp/FileOnDisk.txt'))
print

    # This fails
plink_data = StringIO.StringIO('StringIO data.')
print 'This is the error.'
pprint(processFile(plink_data))
Run Code Online (Sandbox Code Playgroud)

产量

这是输出FileOnDisk.txt:

['This file is on disk.\n']
Run Code Online (Sandbox Code Playgroud)

这是错误:

Traceback (most recent call last):
  File "C:\temp\test.py", line 20, in …
Run Code Online (Sandbox Code Playgroud)

python python-2.x with-statement contextmanager

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

Sublime Text 2:仅在Mac 10.8.3上通过键盘选择矩形或列?

我无法弄清楚如何仅使用键盘在Sublime Text 2中进行矩形选择.我似乎经常遇到的是执行ctrl-shift-up或-down(我假设平均箭头键),如下所示:https://stackoverflow.com/a/13796939/1022967

但是当我尝试使用它时,我必须发送一个操作系统级别的命令,因为发生的事情是我的窗口慢慢退去并向我显示我在Mac上打开的所有打开的应用程序/窗口(我忘记了所谓的 - 就像我运行的仪表板一样).当我在Sublime Text 2之外的应用程序中使用此键和弦时会发生这种情况.

我有什么错误的配置吗?我可以使用其他键和弦来完成此操作吗?

sublimetext2

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

dplyr'重命名'标准评估功能不按预期工作?

更新:从这篇文章下面的评论,这现在按预期工作,没有我在这里列出的问题.

以下是使用rename_dplyr 的玩具示例.我希望能够使用下面的第二个示例将列名更改回原始名称,但我猜测函数参数评估规则以某种方式阻止它按照我的想法运行.使用原始的plyr包rename函数(以及使用基本包names函数)有一个简单的解决方法,但我有一种感觉,我错过了一个dplyr解决方案.

我有一个解决方法,如下所示,但我欢迎第二个示例的dplyr解决方案按照我的预期工作,或者解释为什么我不应该期望它按照我希望的方式工作.

谢谢你,马特

编辑:我在下面添加了一个例子,rename_用于完成这项工作,但很复杂.我假设如果哈德利在下面提到的错误得到修复,这将如下所示.但在那之前,我的尴尬方式确实如此,但使用标准plyr方法可能更好.最后还添加了基本R技术,例如完整性.

library(plyr)
library(dplyr)

# dataframe to operate on
dat <- data_frame(a=1, b=1)

# identifier with string of column name in dat
x <- "a"


# Renaming using standard evaluation this way works
dat %>%
    rename_("new" = x)
# Source: local data frame [1 x 2]
# 
#   new b
# 1   1 1


# But changing it back does not
# I expect "a" to …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

rvest,html_nodes()错误:无法将'environment'强制类型为'list'类型的向量.失败RScript,适用于Session

html_nodes()当作为可执行的RScript运行时,该函数失败如下,但在交互式运行时成功.有人知道在跑步中会有什么不同吗?

交互式运行使用全新会话运行,源语句是第一次运行.

$ ./test-pdp.R
>
> ################################################################################
> # Setup
> ################################################################################
> suppressPackageStartupMessages(library(plyr))
> suppressPackageStartupMessages(library(dplyr))
> suppressPackageStartupMessages(library(stringr))
> suppressPackageStartupMessages(library(rvest))
> suppressPackageStartupMessages(library(httr))
>
>
> read_html("http://google.com") %>%
+     html_nodes("div") %>%
+     length()
Error in as.vector(x, "list") :
  cannot coerce type 'environment' to vector of type 'list'
Calls: %>% ... <Anonymous> -> lapply -> as.list -> as.list.default
Execution halted
Run Code Online (Sandbox Code Playgroud)

然而,当以source()交互方式运行时它会成功:

> source("/Users/a6001389/Documents/projects/hottest-deals-page-scrape/src/test-pdp.R", echo=TRUE)
> #!/usr/bin/RScript
> options(echo=TRUE)
> ################################################################################
> # Setup
> ####################################################### .... [TRUNCATED] 
> suppressPackageStartupMessages(library(dplyr)) …
Run Code Online (Sandbox Code Playgroud)

r rvest

10
推荐指数
1
解决办法
918
查看次数

sqldf:将时间戳从本地时间更改为GMT/UTC

在我的机器上,sqldf将POSIXct从本地时间(我在CST,GMT -0600)更改为GMT/UTC.这是预期的行为吗?我可以阻止R或sqldf这样做吗?这是我的代码:

> library('sqldf')
> 
> before <- data.frame(ct_sys = Sys.time())
> before
               ct_sys
1 2012-03-01 12:57:58
> after <- sqldf('select * from before')
> after
               ct_sys
1 2012-03-01 18:57:58
> 
Run Code Online (Sandbox Code Playgroud)

r sqldf

9
推荐指数
1
解决办法
640
查看次数

lapply over vector,使用值作为输出列表名称

我想知道最好的方法是使用lapply famliy(或plyr)函数系列来获取向量,将函数应用于元素,并返回一个名称与第一个参数向量中提供的值相同的列表.所以,例如,如果我这样做:

lapply(letters[1:3], function(x) NULL)

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL
Run Code Online (Sandbox Code Playgroud)

我想返回,而不是[[1]],[[2]],[[3]]作为列表的名称(或简称为普通索引),字母"a","b",和"c"作为输出列表的名称.

我从这里知道我可以这样做(如何在R/Splus中创建一个名称但没有条目的列表),事先用正确的名称创建列表,但我想知道如果我不能预先创建列出正确的名称.

谢谢,马特

r

8
推荐指数
1
解决办法
2460
查看次数

Kafka:动态查询配置

有没有办法在server.properties不直接访问该文件本身的情况下访问配置值?

我以为:

kafka-configs.sh --describe --entity-type topics --zookeeper localhost:2181
Run Code Online (Sandbox Code Playgroud)

可能会给我我想要的东西,但我没有看到设定的值server.properties.只是以下(我将'ddos'设置为我自己的主题kafka-topics.sh):

Configs for topics:ddos are
Configs for topics:__consumer_offsets are segment.bytes=104857600,cleanup.policy=compact
Run Code Online (Sandbox Code Playgroud)

我在想我也会看到全局配置的选项,比如我的默认配置:

log.retention.hours=168
Run Code Online (Sandbox Code Playgroud)

提前致谢.

apache-kafka

8
推荐指数
1
解决办法
588
查看次数

仅返回ResultSet的列名而不实际执行查询(Oracle和Java)

我想知道是否有办法返回在我实际执行查询时生成的结果集(Oracle数据库,在Java中)的列名.例如,假设我的SQL看起来像这样:

select * from <complex table join>;
Run Code Online (Sandbox Code Playgroud)

有没有办法将此查询发送到oracle并让它告诉我结果集中的列名是什么,它将返回而不实际执行查询(因为它很昂贵)?

java oracle

7
推荐指数
2
解决办法
2132
查看次数

如何正确地"拟合"拟合的线性模型(通过`lm`)到ASCII文件并在以后重新创建?

我想将一个lm对象持久化到一个文件并将其重新加载到另一个程序中.我知道我可以通过saveRDS/ 写入/读取二进制文件来做到这一点readRDS,但我希望有一个ASCII文件而不是二进制文件.在更一般的层面上,我想知道为什么我在dput输出中阅读的习语一般不符合我的预期.

下面是简单拟合的示例,以及模型的成功和不成功的重新创建:

dat_train <- data.frame(x=1:4, z=c(1, 2.1, 2.9, 4))
fit <- lm(z ~ x, dat_train)
rm(dat_train) # Just to make sure fit is not dependent upon `dat_train existence`

dat_score <- data.frame(x=c(1.5, 3.5))

## This works (of course)
predict(fit, dat_score)
#    1    2 
# 1.52 3.48
Run Code Online (Sandbox Code Playgroud)

保存到二进制文件工作:

## http://stackoverflow.com/questions/5118074/reusing-a-model-built-in-r
saveRDS(fit, "model.RDS")
fit2 <- readRDS("model.RDS")
predict(fit2, dat_score)
#    1    2 
# 1.52 3.48
Run Code Online (Sandbox Code Playgroud)

这样做(dput它在R会话中不是文件):

fit2 <- eval(dput(fit))
predict(fit2, dat_score)
#    1 …
Run Code Online (Sandbox Code Playgroud)

regression r linear-regression lm

7
推荐指数
1
解决办法
235
查看次数

将矩阵转换为数据帧:在一种情况下工作,而不是另一种情况

下面是一个示例会话输出的剪辑.在其中,我使用该matrix()函数创建一个矩阵,并使用该函数将其简单地转换为数据帧as.data.frame().在第二部分中,我还创建了一个矩阵,但是通过一个不同的过程(我想要工作的那个),但即使str()给我类似的输出,我在转换到数据帧时也会出错.有任何想法吗?

编辑:最后,我添加了一行,我(重新)将矩阵转换为矩阵,然后将其转换为数据框.它可以工作,但我不应该根据我在str()输出中看到的test_mx那些无法重铸而不能作为数据框进行重铸.所以我知道如何修复,但我不明白为什么我需要做那个额外的步骤来做到这一点.

R version 2.15.2 (2012-10-26) -- "Trick or Treat"

> library(reshape)
> ## This works
> ## ==========
> tmx = matrix(1:12*0.1, ncol=4)
> rownames(tmx) = c("A", "B", "C")
> colnames(tmx) = 0:3
> tmx
    0   1   2   3
A 0.1 0.4 0.7 1.0
B 0.2 0.5 0.8 1.1
C 0.3 0.6 0.9 1.2
> 
> str(tmx)
 num [1:3, 1:4] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 …
Run Code Online (Sandbox Code Playgroud)

r matrix dataframe

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