我想念一种以透明的方式将数据添加到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) 我使用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)
注意:我没有权限从数据库端终止查询.
我试图写一个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
假设我有一个如下功能:
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) 我们如何构造一个查询来搜索特定字段不为空?
field_name:*
不管用.我试过field_name:[a* to z*]
这适用于英语,但不包括所有语言.
还有其他建议吗?
我喜欢使用R中View()调用的源代码编辑器/数据查看器。我使用多个监视器,当我在RStudio主窗口中编写代码时,在侧面监视器上打开一个或两个查看器真的很不错。如果要查看多个数据框,必须先执行View(df),然后单击要查看的每个数据框的“在新窗口中显示”按钮,这有点不方便。
我想知道是否可以将某种包装材料放在一起,或者将某些设置藏在某个地方,这样可以做到,所以当我调用View()时,查看器会自动在新窗口中打开。有任何想法吗?
我在Tidyverse中相当熟练,但总是使用ifelse()
而不是dplyr if_else()
.我想切换此行为,并默认为始终使用dplyr::if_else()
和弃用ifelse()
我的代码.
有什么理由不这样做吗?这可能会让我陷入困境吗?我会饶有你的细节,但最近,if_else()
当我在数据分析中不知不觉地创建了一列字符矩阵时,并没有使用我.如果我切换到总是使用if_else()
我希望将来避免这个问题.
偶尔连接到我的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)
编辑:
请参阅下面作为答案发布的部分解决方案,不是最佳的,因为浪费了一些时间来获取我没有用的数据.
我正在建立一个关于模糊匹配的前一个问题的答案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) 我希望正则表达式模式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}
应该抛出错误而不是返回误导性的匹配!我错过了什么或者是否应该将其报告为错误?
r ×9
dplyr ×2
dbplyr ×1
excel ×1
formatting ×1
if-statement ×1
java ×1
lucene ×1
optimization ×1
printing ×1
r-dbi ×1
regex ×1
rodbc ×1
roracle ×1
rstudio ×1
sql-server ×1
viewer ×1