2014-02-08 2 views
2

Я пытаюсь сделать последовательности из диапазона от выхода диапазона.Как сделать последовательности из диапазона

> 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, почему дает мне список с 1 2? Как заставить его вести себя так, как я хочу?

+0

Если вы передадите вектор или data.frame x в качестве одного аргумента для seq, он создаст последовательность 1: length (x) – Vincent

ответ

3

Другой вариант:

do.call(seq, as.list(range(wines$quality))) 
# [1] 3 4 5 6 7 8 

У вас проблема прямо сейчас, вы проходите два элемента nt как один аргумент, когда seq ожидает два аргумента одного элемента, чтобы он мог делать то, что вы хотите.

do.call звонит seq с каждым из пунктов в as.list... в качестве аргумента.

+0

Nice Мне это нравится как один вкладыш. +1 –

1

Я уверен, что есть любитель способ сделать это, но почему бы не просто:

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

Или даже 'x [1]: x [2]' –

1

Некоторые возможные решения, хотя evalparse более дурачиться:

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 
Смежные вопросы