2014-09-06 1 views
-2

[Только что начали изучать R]В R, есть ли способ указать вектор как * literal *?

Скажите, я хочу создать вектор со значениями 1 4 6 8. Ни одна из этих работ:

x <- [1, 4, 6, 8] 
x <- [1 4 6 8] 

Есть ли способ, чтобы создать вектор, используя буквальное обозначение, то есть без использования функции и т.д.?

+3

Не уверен, что это так медленно о 'с (1,4,6,8)' - это * один * дополнительный символ для ввода. –

+2

Ответ - нет. Все, что вы делаете, это функция в R. Как вы думаете, '<-'? –

+2

не уверен относительно downvotes. Не много исследований, а часть «почему» немного раздражает, но я думаю, что это интересный («полезный») вопрос. –

ответ

3

Чтобы решить ваш первый вопрос

Есть ли способ, чтобы создать вектор с помощью буквального обозначения, то есть без с использованием функции и т.д.?

вы можете создать вектор таким образом, что-то мимики вашего примера использования «буквальное обозначения» выше; но технически (примерно) все в R является вызовом функции, даже индексирование скобок [ и назначение объекта <-. Например, вы могли бы сделать что-то вроде

x <- NULL 
x[1:4] <- 1:4 
## 
> x 
[1] 1 2 3 4 

, но затем снова [<- и : являются функциями - смотрите в файле справки, введя ?"[<-" или ?"[". Независимо от того, является ли это «более неудобным», чем ваша альтернатива, конечно, субъективна, но как только вы привыкли к R-языку, вы, скорее всего, не подумаете. Лично я предпочитаю его чем-то вроде x[1, 2, 3, 4], который вы можете сделать в Python, Julia и т. Д. Несмотря на это, ваш первый пример недействителен для vector, потому что в синтаксисе R вы используете (n-1) запятые для представления (n) измерений (в таких случаях). Например, вы можете создать 3-мерный массив, такой как

Y <- array(1:27,dim=c(3,3,3)) 
> Y 
, , 1 

    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 

, , 2 

    [,1] [,2] [,3] 
[1,] 10 13 16 
[2,] 11 14 17 
[3,] 12 15 18 

, , 3 

    [,1] [,2] [,3] 
[1,] 19 22 25 
[2,] 20 23 26 
[3,] 21 24 27 

and access elements as 

> Y[1,1,3] 
[1] 19 
> Y[1,1,1] 
[1] 1 
> Y[1,2,3] 
[1] 22 

, но, очевидно, это не касается векторов (одномерных). К вашему другому вопросу о скорости, проверить это невозможно, потому что ваш предложенный синтаксис недействителен.

+0

Почему вы идете полностью, 'x1 <- NULL; x1 [1: 10000] <- 1: 10000' вместо просто 'x <- 1: 10000'? Кроме того, ':' также является функцией, поэтому как она отличается от использования 'c'? –

+1

Это было самое близкое, что я мог придумать, чтобы воспроизвести его синтаксис типа 'x <- [1,2,3,4]'; Я бы просто использовал 'x <- 1: 10000' в своем собственном коде.Кроме того, я заметил, что ':' также является функцией, и, как вы указали выше, нет способа избежать использования какого-либо типа функции. Я не говорю, что они разные, я просто пытался придумать что-то похожее на его сравнение использования 'c (...)' vs. '[...]'. – nrussell

0

Другой способ сделать это, чтобы создать список, а затем преобразовать его в вектор, как это:

x <- unlist(list(1,4,6,8)) 

 Смежные вопросы

  • Нет связанных вопросов^_^