小编Moo*_*per的帖子

:= 在 VBA 中是什么意思

这可能是一个简单的问题,但我正在网上搜索答案,但似乎找不到。

以下面的代码为例,看看这些符号是什么意思。符号 1 :="" 符号 2 :=_

Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
Run Code Online (Sandbox Code Playgroud)

vba colon-equals

4
推荐指数
1
解决办法
3850
查看次数

从SAS中的字符串中删除单引号

我需要使用单引号读取字符串,而不使用宏retrieve_context中的引号.

在调用宏时,用户可以使用单引号或不带引号来调用它,如下所示:

%retrieve_context('american%s choice', work.phone_conv, '01OCT2015'd, '12OCT2015'd)
%retrieve_context(american%s choice, work.phone_conv, '01OCT2015'd, '12OCT2015'd)
Run Code Online (Sandbox Code Playgroud)

如何在没有单引号的情况下读取宏中的第一个参数?

我试过%conv_quote = unquote(%str(&conv_quote))但它没用.

sas sas-macro

4
推荐指数
1
解决办法
5424
查看次数

聚合效率低于循环?

我试图在一个大表上执行此操作,以计算data.table X中具有a和b的不同组合的行.

Y <- aggregate(c ~ a+b,X,length)
Run Code Online (Sandbox Code Playgroud)

虽然RAM使用率仍然存在,但它仍然需要永远(我在30分钟后停止).

然后我尝试手动循环遍历值b并仅聚合在一起a(技术上仍然聚合bb每次只有一个值):

sub_agg <- list()
unique_bs <- unique(X$b)
for (b_it in unique_bs){
sub_agg[[length(sub_agg)+1]] <- aggregate(c ~ a + b,subset(X, b == b_it),length)
}
Y <- do.call(rbind, sub_agg )
Run Code Online (Sandbox Code Playgroud)

我在3分钟内完成了.

我可以更进一步完全摆脱聚合,只对子集进行操作.

聚合效率是否低于嵌套循环和子集上的操作,或者这是一个特例吗?

聚合通常是占用时间最多的代码部分,所以我现在想要总是尝试循环,我想更好地理解这里发生的事情.

附加信息:

X有2000万行

b的50个不同值

a的15 000个不同的值

loops aggregate r

4
推荐指数
1
解决办法
342
查看次数

与最大值和因子汇总

我有一个包含因子列的data.frame,我想在其上计算最大值(或最小值或分位数).我不能在因素上使用这些功能,但我想.

这是一些例子:

set.seed(3)
df1 <- data.frame(id = rep(1:5,each=2),height=sample(c("low","medium","high"),size = 10,replace=TRUE))
df1$height <- factor(df1$height,c("low","medium","high"))
df1$height_num <- as.numeric(df1$height)
# > df1
#    id height height_num
# 1   1    low          1
# 2   1   high          3
# 3   2 medium          2
# 4   2    low          1
# 5   3 medium          2
# 6   3 medium          2
# 7   4    low          1
# 8   4    low          1
# 9   5 medium          2
# 10  5 medium          2
Run Code Online (Sandbox Code Playgroud)

我可以轻松地做到这一点:

aggregate(height_num ~ id,df1,max)
#   id height_num …
Run Code Online (Sandbox Code Playgroud)

aggregate r max min factors

4
推荐指数
1
解决办法
692
查看次数

`[`?的第一个参数的名称是什么?

letter[2]相当于'['(letters,i=2),第二个参数是i.

第一个参数的名称是什么,因此下面两个表达式是等价的?

lapply(1:3,function(x){letters[x]})
lapply(1:3,`[`,param1 = letters) # param1 to be replaced with solution
Run Code Online (Sandbox Code Playgroud)

r extract

4
推荐指数
1
解决办法
114
查看次数

使用 dplyr 按所有列排列数据框

我生成 1 和 0 的数据帧如下:

library(tidyverse)
library(glue)

num_var <- 3

rep(list(c(0L, 1L)), num_var) %>%
  set_names(glue("var_{seq_len(num_var)}")) %>%
  expand.grid() %>%
  mutate(total = rowSums(.)) %>%
  select(total, everything()) %>%
  arrange(total, desc(var_1, var_2, var_3))

#>   total var_1 var_2 var_3
#> 1     0     0     0     0
#> 2     1     1     0     0
#> 3     1     0     1     0
#> 4     1     0     0     1
#> 5     2     1     1     0
#> 6     2     1     0     1
#> 7     2     0     1     1
#> 8     3     1 …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse tidyselect

4
推荐指数
1
解决办法
3532
查看次数

按所有变量计数/计数与 dplyr 不同

说我有这个data.frame

library(dplyr)
df1 <- data.frame(x=rep(letters[1:3],1:3),y=rep(letters[1:3],1:3))
#   x y
# 1 a a
# 2 b b
# 3 b b
# 4 c c
# 5 c c
# 6 c c
Run Code Online (Sandbox Code Playgroud)

我可以通过提及名称轻松分组和计数:

df1 %>%
  count(x,y)
# A tibble: 3 x 3
#        x      y     n
#   <fctr> <fctr> <int>
# 1      a      a     1
# 2      b      b     2
# 3      c      c     3
Run Code Online (Sandbox Code Playgroud)

如何以最紧凑/可读的方式在不提及单个列名的情况下按所有内容分组?

r dplyr

4
推荐指数
1
解决办法
497
查看次数

舍入数字并保留足够的有效数字以区别于邻居

我有一个增加数字的向量,如下所示:

set.seed(1)
numbers  <- cumsum(abs(rnorm(10,100,100)))
# [1]   37.35462  155.71895  172.15609  431.68417  564.63495  582.58811  731.33101  905.16348 1062.74162 1132.20278
Run Code Online (Sandbox Code Playgroud)

我想选择最小数量的有效数字,然后舍入这些数字,确保我始终保持足够的数字,以便连续的数字不会四舍五入到相同的值.

请参阅以下示例(预期输出):

magic(numbers, n = 1)
# [1]   40  160  170  400  560  580  700  900 1060 1130
Run Code Online (Sandbox Code Playgroud)
  • 37.35462四舍五入到40因为我在这里只要求一位数(n = 1)
  • 我不能圆155.71895200,因为172.15609会被四舍五入到200太受同样的规则,所以我圆155.71895160,并172.15609170
  • 我可以肯定地圆431.68417400,因为它是远远不够的172.15609,并564.63495

等等...

对于n = 2或3,我们将获得:

magic(numbers, n = 2)
# [1]   37  160  170 …
Run Code Online (Sandbox Code Playgroud)

r rounding

4
推荐指数
1
解决办法
104
查看次数

如何合并错误?

当代码在第一次运行时就拥有提供详尽帮助的所有信息时,必须逐一解决问题是令人沮丧的。

and1 <- function(a , b) {
  stopifnot(is.logical(a), is.logical(b))
  a & b
}

and1(0, 1)     # nope
#> Error in and1(1, 2): is.logical(a) is not TRUE

# fix it
and1(FALSE, 1) # still not good
#> Error in and1(FALSE, 2): is.logical(b) is not TRUE

# fix again
and1(FALSE, TRUE) # finally works
#> [1] FALSE
Run Code Online (Sandbox Code Playgroud)

我们可以设计复杂的组合,但这看起来很糟糕,并且通过更多的检查,它会变得非常复杂。

and2 <- function(a , b) {
  if (!is.logical(a)) {
    if (!is.logical(b)) {
      stop("\n`a` must be logical\n`b` must be logical")
    }
    stop("`a` must be logical") …
Run Code Online (Sandbox Code Playgroud)

error-handling r

4
推荐指数
1
解决办法
204
查看次数

基于非引用拼接排除多个列(!!!)

试图排除

  • 调用中的多个tidyr::gather()
  • 它通过字符向量参数(输出shiny::selectInput)而不是via 作为我的函数的输入...
  • 程序化的方式

如何通过整洁的eval功能实现这一目标?

由于我经由单个函数参数传递多个列名,以为需要使用!!!(引文结束剪接)而不是!!如在奠定了与dplyr编程.但这似乎并没有很好地发挥作用,tidyselect::vars_select()而且似乎-造成了麻烦.

这是我想要做的基本事情:

library(magrittr)
gather_data_1 <- function(dat, ...) {
  dat %>% tidyr::gather("key", "value", ...)
}
mtcars %>% gather_data_1(-mpg, -cyl) %>% head()
#>    mpg cyl  key value
#> 1 21.0   6 disp   160
#> 2 21.0   6 disp   160
#> 3 22.8   4 disp   108
#> 4 21.4   6 disp   258
#> 5 18.7   8 disp …
Run Code Online (Sandbox Code Playgroud)

r tidyr tidyeval tidyselect

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