【问题标题】:Generating two sequences with one function and one parameter用一个函数和一个参数生成两个序列
【发布时间】:2021-04-07 18:05:49
【问题描述】:

我要生成这两个序列:

A = c(0.25,0.50,0.75,1,0.25,0.50,0.75,0.25,0.50,0.25)
B = c(0.33,0.66,1,0.33,0.66,0.33)

只有一个功能。 我已经有了这个:

X = 5
X = 4
rep(seq(1/(X-1),1,1/(X-1)), X-1)

但是,我仍然需要删除一些值, 我是这样做的,但这不是正确的方法:

rep(seq(1/(X-1),1,1/(X-1)), X-1)[-c(8,11,12,14,15,16)]
rep(seq(1/(X-1),1,1/(X-1)), X-1)[-c(6,8,9)]

有没有办法在一个函数中写这个?

【问题讨论】:

  • f = function(x) sequence(x:1)/x; f(4); f(3)

标签: r sequence seq rep


【解决方案1】:

一种方法是通过sequence(x:1)/xx 采用所需的值。

> f = function(x) sequence(x:1)/x
> f(4)
# [1] 0.25 0.50 0.75 1.00 0.25 0.50 0.75 0.25 0.50 0.25
> f(3)
# [1] 0.3333333 0.6666667 1.0000000 0.3333333 0.6666667 0.3333333

(这是假设sequence 算作一个函数,即我们不包括:/ 等)

【讨论】:

    【解决方案2】:

    @user20650sequence 方法已经是一个超级优雅的选择。下面是另一个,但不是那么简洁

    f <- function(x) unlist(sapply(x:1, seq)) / x
    

    这样

    > f(3)
    [1] 0.3333333 0.6666667 1.0000000 0.3333333 0.6666667 0.3333333
    > f(4)
     [1] 0.25 0.50 0.75 1.00 0.25 0.50 0.75 0.25 0.50 0.25
    

    【讨论】:

    • 它已经足够简洁了……事实上,在 v4.0 中用 C 重写之前,它几乎完全是用来编写序列的
    猜你喜欢
    • 2016-04-28
    • 2011-02-04
    • 2022-12-20
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多