R 如何从一个范围生成序列

R 如何从一个范围生成序列,r,R,我试图从range的输出中,从一个range生成一个序列 > range(wines$quality) [1] 3 8 > seq(3, 8) [1] 3 4 5 6 7 8 > seq(range(wines$quality)) [1] 1 2 但是我试着把范围3,8的输出放到seq中,得到3,4,5,6,7,8的列表,为什么给我一个带12的列表?如何让它按照我想要的方式运行?我确信有一种更奇特的方式可以做到这一点,但为什么不只是: x <- range(win

我试图从range的输出中,从一个range生成一个序列

> range(wines$quality)
 [1] 3 8
> seq(3, 8)
 [1] 3 4 5 6 7 8
> seq(range(wines$quality))
 [1] 1 2

但是我试着把范围3,8的输出放到seq中,得到3,4,5,6,7,8的列表,为什么给我一个带12的列表?如何让它按照我想要的方式运行?

我确信有一种更奇特的方式可以做到这一点,但为什么不只是:

x <- range(wine$quality)
seq(x[1], x[2])

x一些可能的解决方案,尽管
eval
parse
更像是在胡闹:

set.seed(10)
x <- rpois(20, 10)

y <- range(x); y[1]:y[2]
seq(y[1], y[2])
eval(parse(text = paste(range(x), collapse=":")))

## > y <- range(x); y[1]:y[2]
##  [1]  5  6  7  8  9 10 11 12 13 14 15

## > seq(y[1], y[2])
##  [1]  5  6  7  8  9 10 11 12 13 14 15

## > eval(parse(text = paste(range(x), collapse=":")))
##  [1]  5  6  7  8  9 10 11 12 13 14 15
set.seed(10)
x eval(解析(text=paste(范围(x),collapse=“:”))
##  [1]  5  6  7  8  9 10 11 12 13 14 15
另一个选项:

do.call(seq, as.list(range(wines$quality)))
# [1] 3 4 5 6 7 8
现在的问题是,当
seq
需要两个单元素参数以实现所需功能时,您正在将一个双元素向量作为一个参数传递


do.call
calls
seq
,将
as.list…
中的每一项作为参数。

Nice我最喜欢这一行+1如果将vector或data.frame x作为一个参数传递给seq,它将创建一个序列1:length(x)