小编use*_*531的帖子

no visible binding for global variable ‘.’

I\'m currently co-developing an R package using devtools. We use the\ntidyverse %>% and associated purrr and dplyr packages within our\nfunctions.

\n

One of our functions is as follows (edited for clarity):

\n
#\' Print `cust_modl` object\n#\'\n#\' @param x A `cust_modl` object.\n#\' @param ... Additional arguments passed to `print.cust_modl()` to print the\n#\'   object.\n#\'\n#\' @method print cust_modl\n#\' @export\nprint.cust_modl <- function(x, ...) {\n\nreq_var_nms <- x$var %>%\npurrr::compact(.x = .) %>%\nnames(x = .)\n\ncomp_var_ind_filt <- req_var_nms %>%\npurrr::map(.x = ., .f = ~ purrr::pluck(x$var, .x))\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n …

r dplyr tidyeval rlang

14
推荐指数
1
解决办法
5403
查看次数

传入函数作为输入和返回功能

我想编写一个R函数,它接受一个数学函数x并返回一个新函数x作为输出.例如:

输入应作为数学函数(或关系)传入x:

g <- x^2 + 9*x + log(x)
Run Code Online (Sandbox Code Playgroud)

结果输出应该是:

function(x) (exp(g))
Run Code Online (Sandbox Code Playgroud)

即我想回到原来的功能的象征性指数表达x,即exp(x^2 + 9*x + log(x))在这个说明性的例子

理想情况下它会返回函数对象:

function(x) (exp(x^2 + 9*x + log(x)))
Run Code Online (Sandbox Code Playgroud)

我尝试如下:

test <- function(g){
h <- function(x){exp(g)}
return(h)
}
m <- test(x^2 + 9*x + log(x))
m(10)
Run Code Online (Sandbox Code Playgroud)

所以m(10)应该返回:

exp(10^2 + 9*10 + log(10))
Run Code Online (Sandbox Code Playgroud)

在这种情况下是exp(192.3026).

有人能说明怎么做吗?

r

8
推荐指数
3
解决办法
662
查看次数

创建没有eval/parse的函数列表

我有相等长度的3个向量y,h并且hp定义如下:

y  <- c(2, 5, 6)
h  <- c(4, 25, 35)
hp <- c(3, 10, 12)
Run Code Online (Sandbox Code Playgroud)

这些值只是说明性的.

我想创建一个函数的输出列表 final_list,x如下所示

function(x) y + (h - hp) * x
Run Code Online (Sandbox Code Playgroud)

(仅显示理想的说明性输出):

[[1]]
[1] function(x) 2 + (1) * x

[[2]]
[1] function(x) 5 + (15) * x

[[3]]
[1] function(x) 6 + (23) * x
Run Code Online (Sandbox Code Playgroud)

我知道这可以通过eval/parse完成,但这不会为函数生成透明输出.

我想从这3个向量创建函数并输出而不使用eval/parse.如果可能的话,我会非常乐意学习并留下深刻的印象!

r

4
推荐指数
2
解决办法
110
查看次数

使用purrr重命名多个数据帧列

我有以下包含名为列的数据框列表 cyl

# Create 3 dataframes with identical column names
mt_list <- list(head(mtcars[, 1:2]), tail(mtcars[, 1:2]), mtcars[13:18, 1:2])
mt_list
#> [[1]]
#>                    mpg cyl
#> Mazda RX4         21.0   6
#> Mazda RX4 Wag     21.0   6
#> Datsun 710        22.8   4
#> Hornet 4 Drive    21.4   6
#> Hornet Sportabout 18.7   8
#> Valiant           18.1   6
#> 
#> [[2]]
#>                 mpg cyl
#> Porsche 914-2  26.0   4
#> Lotus Europa   30.4   4
#> Ford Pantera L 15.8   8
#> Ferrari Dino …
Run Code Online (Sandbox Code Playgroud)

r purrr tidyverse

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

排序第n列bash问题

我正在运行以下命令来处理一些CSV数据

grep -i "area harvested.*2005" ps1_apricot_countries_2005.csv | sed 's/\"//g'
Run Code Online (Sandbox Code Playgroud)

这导致以下输出(前7个记录仅显示为样本):

Afghanistan,31,Area Harvested,2005,Ha,5200.00000,F
Africa +,31,Area Harvested,2005,Ha,59536.00000,A
Albania,31,Area Harvested,2005,Ha,400.00000,F
Algeria,31,Area Harvested,2005,Ha,22888.00000,
Americas +,31,Area Harvested,2005,Ha,11496.00000,A
Argentina,31,Area Harvested,2005,Ha,2200.00000,F
Armenia,31,Area Harvested,2005,Ha,5300.00000,
Asia +,31,Area Harvested,2005,Ha,272644.00000,A
Run Code Online (Sandbox Code Playgroud)

可以看出,这是按字母顺序排在第一列.

我试图将其管道化,sort以便我可以根据第6个数字逗号分隔列按降序对上述数据进行排序.

我试过了:

grep -i "area harvested.*2005" ps1_apricot_countries_2005.csv | sed 's/\"//g' | sort -k6rn
Run Code Online (Sandbox Code Playgroud)

然而,这导致以下结果(前七条记录仅作为样本显示):

Afghanistan,31,Area Harvested,2005,Ha,5200.00000,F
Africa +,31,Area Harvested,2005,Ha,59536.00000,A
Albania,31,Area Harvested,2005,Ha,400.00000,F
Algeria,31,Area Harvested,2005,Ha,22888.00000,
Americas +,31,Area Harvested,2005,Ha,11496.00000,A
Argentina,31,Area Harvested,2005,Ha,2200.00000,F
Armenia,31,Area Harvested,2005,Ha,5300.00000,
Run Code Online (Sandbox Code Playgroud)

它似乎仍然按降序排列在第一列而不是第六列.任何人都可以解释如何纠正上述方法来实现这一目标吗?

sorting bash

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

使用lubridate解析日期时间

我试图用以下格式解析以下日期时间:

library(lubridate)
a <- "2004-05-07 18:24:58.666424"
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,但是返回了NAs

b <- lubridate::mdy_hms(a)
c <- lubridate::mdy(a)
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释如何解析这个问题.如果不使用lubridate我也没关系.

r lubridate

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

tidyr-获得组合的独特方法(仅使用tidyverse)

我想使用tidyverse(理想情况)获得数据帧的唯一字符串列的所有唯一成对组合。

这是一个虚拟的示例:

library(tidyverse)

a <- letters[1:3] %>% 
        tibble::as_tibble()
a
#> # A tibble: 3 x 1
#>   value
#>   <chr>
#> 1     a
#> 2     b
#> 3     c

tidyr::crossing(a, a) %>% 
    magrittr::set_colnames(c("words1", "words2"))
#> # A tibble: 9 x 2
#>   words1 words2
#>    <chr>  <chr>
#> 1      a      a
#> 2      a      b
#> 3      a      c
#> 4      b      a
#> 5      b      b
#> 6      b      c
#> 7      c      a
#> 8      c …
Run Code Online (Sandbox Code Playgroud)

r tidyr tidyverse

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

创建混合有单引号和双引号的粘合字符串

我正在尝试使用其中混合有“单”“双”glue引号的包创建一个字符串。R

作为代表,请考虑SQL我想要构建的以下类型的查询字符串:

CREATE TABLE fact_final_table AS 
(SELECT tab1.id,
    AVG(tab2."MV") FILTER (WHERE tab2.record_dt BETWEEN tab1.start_date::date - integer '7'
                                                      AND tab1.start_date::date - integer '1') AS "mv_avg_1w",
    AVG(tab2."MV") FILTER (WHERE tab2.record_dt BETWEEN tab1.start_date::date - integer '14'
                                                      AND tab1.start_date::date - integer '1') AS "mv_avg_2w"
FROM (SELECT id,
             start_date,
             point
      FROM base_tab
      WHERE mpfb.start_date::date >= '01-01-2000'::date) AS tab1
LEFT JOIN ghcnd_observations AS tab2
    ON (tab2.record_dt BETWEEN (tab1.start_date::date - integer '180')
                           AND (tab1.start_date::date - integer '1')
        AND ST_DWithin(tab1.point, …
Run Code Online (Sandbox Code Playgroud)

r tidyverse r-glue

2
推荐指数
1
解决办法
1627
查看次数

标签 统计

r ×7

tidyverse ×3

bash ×1

dplyr ×1

lubridate ×1

purrr ×1

r-glue ×1

rlang ×1

sorting ×1

tidyeval ×1

tidyr ×1