【发布时间】:2021-04-23 17:36:10
【问题描述】:
问题
我想创建许多特定长度的空向量。每个向量都有一个特定的名称。
想要的结果
example <- 1:10 # my actual vector length will change occasionally
a <- vector("numeric", length(example))
a[1] <- example[1]
b <- vector("numeric", length(example))
b[1] <- example[1]
...
etc.
a
[1] 1 0 0 0 0 0 0 0 0 0
b
[1] 1 0 0 0 0 0 0 0 0 0
etc
尝试:
create_vectors <- function(x){
x <- vector("numeric", length(example))
x[1] <- example[1]
}
x <- c("a", "b", "c") # My actual task involves many more vectors
result <- lapply(x, create_vectors)
list2env(result, .GlobalEnv)
Error in list2env(result, .GlobalEnv) :
names(x) must be a character vector of the same length as x
以上是人为的例子。我有我想要的向量的特定名称,例如"a" 将是 "total_demand"、"b" = "moving_parts" 等等。
【问题讨论】:
-
为什么不将它们保存在
data.frame中? -
我想问题是当向量的长度发生变化时这不起作用(如问题所示)。在这种情况下,
list()可能更适合。 -
谢谢“sindri_baldur”,你是对的。一旦我创建了一个空数据框,我的代码行数减少了 90%。请看下面我的回答。 “我的毛巾在哪里”,我希望所有向量都根据另一列的长度而变大或变小。我不需要所有向量的大小相同。抱歉没有说得更清楚。
-
以编程方式创建不同的变量(而不是单个容器对象)几乎总是一个坏主意。你只是让你的数据更难处理。如果你走这条路,迟早你会发现自己面临如何处理给定变量名列表的数据的问题。请注意,列表可以包含不同长度的向量,因此您不限于将数据帧用作容器。