I\'m currently co-developing an R package using devtools. We use the\ntidyverse %>% and associated purrr and dplyr packages within our\nfunctions.
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}\nRun Code Online (Sandbox Code Playgroud)\n … 我想编写一个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).
有人能说明怎么做吗?
我有相等长度的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.如果可能的话,我会非常乐意学习并留下深刻的印象!
我有以下包含名为列的数据框列表 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) 我正在运行以下命令来处理一些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)
它似乎仍然按降序排列在第一列而不是第六列.任何人都可以解释如何纠正上述方法来实现这一目标吗?
我试图用以下格式解析以下日期时间:
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我也没关系.
我想使用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)
我正在尝试使用其中混合有“单”和“双”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)