在R语言中,是否有一种方法可以将向量指定为“字面值”?

3

[刚开始学习R语言]

比如说,我想创建一个向量包含以下数值1 4 6 8。但是下面的代码都不行:

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

有没有一种方法可以使用文字记录方式创建向量,而无需使用函数等?

5
不确定 c(1,4,6,8) 为什么这么慢 - 只需要多输入 一个 字符。 - Ben Bolker
2
答案是否定的。在R中,你所做的一切都是一个函数。你认为 <- 是什么? - David Arenburg
2
不确定为什么会被踩。研究工作不够充分,而且“为什么”部分有点让人烦恼,但我认为这是一个有趣(“有用”)的问题。 - Ben Bolker
2
每种编程语言都有其语法。如果你不喜欢 R 的语法,而喜欢 Matlab 的话,那就选择 Matlab 吧。 - IRTFM
“字面量”只在编译语言中才有真正的意义。R 只有在执行到该行时才会看到它,然后必须解析它,将 RHS 按逗号分割,获取数字,创建向量,将其放入 x 中。无论您如何表示它(c(1,2,3) 或 [1,2,3]),所需的工作量都是相同的。 - Spacedman
虽然这在某种程度上对我有些意义,但我并不完全相信。像Java、JavaScript甚至C#这样的语言通常是解释型的。但它们仍然允许并推荐在适当的情况下使用字面量。 - Himanshu P
2个回答

3
另一种方法是创建一个列表,然后将其转换为向量,如下所示:
x <- unlist(list(1,4,6,8))

3
为了回答你的第一个问题,
引用: 有没有一种方法可以使用字面符号创建向量,即不使用函数等?
你可以创建一种向量,在某种程度上类似于你上面使用“文字符号”的示例; 但是从技术上讲(就R而言),即使是方括号索引[ ]和对象分配<-,几乎所有东西都是函数调用。例如,您可以执行以下操作:
x <- NULL
x[1:4] <- 1:4
##
> x
[1] 1 2 3 4

不过,[<-: 也是函数 - 通过输入 ?"[<-"?"[" 查看帮助文件。是否比你的另一种方式更加繁琐当然是主观的,但一旦你习惯了R语言,你很可能就不会再想太多了。就我个人而言,我更喜欢这种方式,而不像在Python、Julia等语言中可能会使用 x[1, 2, 3, 4] 这样的方式...无论如何,你的第一个示例对于一个向量来说是无效的,因为在R语法中,你需要使用(n-1)个逗号来表示(n)个维度(在这种情况下)。例如,你可以创建一个三维数组:

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

但很明显这并不适用于(一维)向量。 至于您提到的速度问题,由于您提出的语法无效,所以无法进行准确测试。


为什么你要这样写 x1 <- NULL ; x1[1:10000] <- 1:10000 而不是直接写成 x <- 1:10000?另外,:也是一个函数,那么它和使用c有什么不同呢? - David Arenburg
1
这是我能想到的最接近复制他的 x <- [1,2,3,4] 类型语法的东西;在我的代码中,我肯定会只使用 x <- 1:10000。此外,我注意到 : 也是一个函数 - 正如你上面指出的那样,没有办法避免使用某种类型的函数。我并不是真的在说它们有什么不同,我只是试图想出一些类似于他使用 c(...) vs. [...] 的比较的东西。 - nrussell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接