小编Sca*_*bee的帖子

简化了R中的dput()

我想念一种以透明的方式将数据添加到SO答案的方法.我的经验是,该structure对象dput()有时会使没有经验的用户感到不必要.但是我没有耐心每次都将它复制/粘贴到一个简单的数据框中,并希望自动化它.类似的东西dput(),但是在简化版中.

说我通过复制/粘贴和其他一些hos有这样的数据,

Df <- data.frame(A = c(2, 2, 2, 6, 7, 8),
                 B = c("A", "G", "N", NA, "L", "L"),
                 C = c(1L, 3L, 5L, NA, NA, NA))
Run Code Online (Sandbox Code Playgroud)

看起来像这样,

Df
#>   A    B  C
#> 1 2    A  1
#> 2 2    G  3
#> 3 2    N  5
#> 4 6 <NA> NA
#> 5 7    L NA
#> 6 8    L NA
Run Code Online (Sandbox Code Playgroud)

在一个整数内,一个因子和一个数字向量,

str(Df)
#> 'data.frame':    6 obs. of  3 variables:
#> …
Run Code Online (Sandbox Code Playgroud)

formatting r

24
推荐指数
4
解决办法
1912
查看次数

如何停止正在运行的查询?

我使用RODBC向SQL-Server发送查询.有时它们需要花费太多时间来运行,所以我需要取消它们.

单击RStudio中的红色"停止"按钮会产生以下错误消息:

R没有响应您的中断处理请求,因此要停止当前操作,您可能需要完全终止R.

终止R将导致您的R会话立即中止.将中断活动计算,并且将丢弃未保存的源文件更改和工作空间对象.

你想现在终止R吗?

如果我单击是,我的会话确实已终止.(注意:使用Rgui而不是RStudio不会让事情变得更好)

然而:

  • 当我使用另一个软件(名为"Query ExPlus")连接到同一个SQL-Server时,我有一个类似的停止按钮,然后单击它会立即中断查询,而不会发生任何崩溃.

  • 当我使用RPostgres包连接到PostgreSQL数据库时,我也可以随时中断查询.

这两点让我觉得应该有办法解决我的问题.我能做什么?

到目前为止,我的解决方法是:

library(RODBC)
library(R.utils)

withTimeout(mydf <- sqlQuery(myconnection, myquery), timeout=120)
Run Code Online (Sandbox Code Playgroud)

注意:我没有权限从数据库端终止查询.

sql-server r rodbc

21
推荐指数
1
解决办法
6464
查看次数

错误:尝试write.xlsx时,压缩工作簿失败

我试图写一个xlsx文件,write.xlsx我得到这个错误:

Error: zipping up workbook failed. Please make sure Rtools is installed or a zip application is available to R.
     Try installr::install.rtools() on Windows.

package ‘Rtools’ is not available (for R version 3.1.2) 
Run Code Online (Sandbox Code Playgroud)

我现在应该怎么做才能解决这个问题?

编辑: 我安装Rtools:

>installr::install.rtools()

No need to install Rtools - You've got the relevant version of Rtools installed
Run Code Online (Sandbox Code Playgroud)

但是之后我还是得到了那个错误 write.xlsx

excel r

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

如何隐藏或禁用功能中打印的消息

假设我有一个如下功能:

ff <- function(x) {
  cat(x, "\n")
  x^2}
Run Code Online (Sandbox Code Playgroud)

并运行它:

y <- ff(5)
# 5 
y
# [1] 25
Run Code Online (Sandbox Code Playgroud)

我的问题是如何禁用或隐藏5打印的cat(x, "\n")如下:

y <- ff(5)
y
# [1] 25
Run Code Online (Sandbox Code Playgroud)

printing r

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

Lucene不是null查询?

我们如何构造一个查询来搜索特定字段不为空?

field_name:*不管用.我试过field_name:[a* to z*]这适用于英语,但不包括所有语言.

还有其他建议吗?

java lucene

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

使R的View()自动在新窗口中打开

我喜欢使用R中View()调用的源代码编辑器/数据查看器。我使用多个监视器,当我在RStudio主窗口中编写代码时,在侧面监视器上打开一个或两个查看器真的很不错。如果要查看多个数据框,必须先执行View(df),然后单击要查看的每个数据框的“在新窗口中显示”按钮,这有点不方便。

我想知道是否可以将某种包装材料放在一起,或者将某些设置藏在某个地方,这样可以做到,所以当我调用View()时,查看器会自动在新窗口中打开。有任何想法吗?

r viewer rstudio

16
推荐指数
2
解决办法
1488
查看次数

dplyr if_else()vs base R ifelse()

我在Tidyverse中相当熟练,但总是使用ifelse()而不是dplyr if_else().我想切换此行为,并默认为始终使用dplyr::if_else()和弃用ifelse()我的代码.

有什么理由不这样做吗?这可能会让我陷入困境吗?我会饶有你的细节,但最近,if_else()当我在数据分析中不知不觉地创建了一列字符矩阵时,并没有使用我.如果我切换到总是使用if_else()我希望将来避免这个问题.

if-statement r dplyr

15
推荐指数
4
解决办法
5845
查看次数

仅在查询返回少于n_max行时收集

偶尔连接到我的Oracle数据库时ROracle,dbplyr我将运行一个取得dplyr::collect比预期更多的数据的操作,而不是R可以处理.

这可能会导致R崩溃,并且通常是我应该在获取之前进一步过滤或聚合数据的标志.

能够在选择是否获取结果之前检查结果的大小(不运行查询两次)会很棒.

让我们来命名它collect2的变化,collect这样就可以了:

预期行为:

small_t <- con %>% tbl("small_table") %>%
  filter_group_etc %>%
  collect2(n_max = 5e6) # works fine

big_t   <- con %>% tbl("big_table")   %>%
  filter_group_etc %>%
  collect2(n_max = 5e6) # Error: query returned 15.486.245 rows, n_max set to 5.000.000
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我也对使用ROracle/ DBI不使用的解决方案持开放态度dplyr,例如:

dbGetQuery2(con, my_big_sql_query,n_max = 5e6) # Error: query returned 15.486.245 rows, n_max set to 5.000.000
Run Code Online (Sandbox Code Playgroud)

编辑:

请参阅下面作为答案发布的部分解决方案,不是最佳的,因为浪费了一些时间来获取我没有用的数据.

r dplyr r-dbi roracle dbplyr

14
推荐指数
2
解决办法
790
查看次数

使用stringdist对变量上的数据进行分区以加速"模糊匹配"

我正在建立一个关于模糊匹配的前一个问题的答案stringdist.

我有两个带有长字符串(消费品名称)的大型数据集(~30k行),我希望通过生成距离分数来模糊匹配.两个产品名称列表中存在一些预期的重叠,但某些产品对于每个列表都是唯一的.

问题在于:我的计算机正在努力用如此多的数据扩展网格,并且R不断崩溃.但是,我有一个可能有助于优化的想法 - 我无法让它发挥作用.

我的大多数字符串可以分时段到基于品牌(如数据子集pantene,neutrogena等等).而不是计算所有字符串组合之间的距离,我想grep为品牌名称,数据子集,然后计算距离.

首先,我使用与前一篇文章相同的功能.

# Function by @C8H10N4O2    
greedyAssign <- function(a,b,d){
      x <- numeric(length(a)) # assgn variable: 0 for unassigned but assignable, 
      # 1 for already assigned, -1 for unassigned and unassignable
      while(any(x==0)){
        min_d <- min(d[x==0]) # identify closest pair, arbitrarily selecting 1st if multiple pairs
        a_sel <- a[d==min_d & x==0][1] 
        b_sel <- b[d==min_d & a == a_sel & x==0][1] 
        x[a==a_sel & b == b_sel] <- 1 …
Run Code Online (Sandbox Code Playgroud)

optimization r fuzzy-comparison

13
推荐指数
1
解决办法
362
查看次数

正则表达式的意外匹配

我希望正则表达式模式ab{,2}c只匹配a后跟0,1或2 b秒,然后是c.

它以许多语言的方式工作,例如Python.但是,在R中:

grepl("ab{,2}c", c("ac", "abc", "abbc", "abbbc", "abbbbc"))
# [1]  TRUE  TRUE  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

第四届我很惊讶TRUE.在?regex,我可以读:

{n,m}前面的项至少匹配n一次,但不超过m一次.

所以我同意{,2}应该写成{0,2}一个有效的模式(与Python不同,文档明确声明省略n指定零下限).

但是然后使用{,2}应该抛出错误而不是返回误导性的匹配!我错过了什么或者是否应该将其报告为错误?

regex r

12
推荐指数
1
解决办法
243
查看次数