这可能是一个简单的问题,但我正在网上搜索答案,但似乎找不到。
以下面的代码为例,看看这些符号是什么意思。符号 1 :="" 符号 2 :=_
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
Run Code Online (Sandbox Code Playgroud) 我需要使用单引号读取字符串,而不使用宏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))但它没用.
我试图在一个大表上执行此操作,以计算data.table X中具有a和b的不同组合的行.
Y <- aggregate(c ~ a+b,X,length)
Run Code Online (Sandbox Code Playgroud)
虽然RAM使用率仍然存在,但它仍然需要永远(我在30分钟后停止).
然后我尝试手动循环遍历值b并仅聚合在一起a(技术上仍然聚合b但b每次只有一个值):
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个不同的值
我有一个包含因子列的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) 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) 我生成 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) 说我有这个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)
如何以最紧凑/可读的方式在不提及单个列名的情况下按所有内容分组?
我有一个增加数字的向量,如下所示:
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.71895到200,因为172.15609会被四舍五入到200太受同样的规则,所以我圆155.71895到160,并172.15609以170431.68417到400,因为它是远远不够的172.15609,并564.63495等等...
对于n = 2或3,我们将获得:
magic(numbers, n = 2)
# [1] 37 160 170 …Run Code Online (Sandbox Code Playgroud) 当代码在第一次运行时就拥有提供详尽帮助的所有信息时,必须逐一解决问题是令人沮丧的。
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) 试图排除
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)