3

在 R 中,“assign('x',v)”将名称为“x”的对象设置为 v。将“x”替换为将文本函数应用于变量 x 的结果。然后“分配”显示它的价值。

不幸的是,“assign(paste('names(','x',')',sep=''),v)”失败了。所以如果'x'是一个变量x,我可以设置它的值,但我不能给它的元素命名。

可以解决这个问题吗?也许是解析评估技巧?谢谢。

4

4 回答 4

5

在您提出问题的表格中,无需assign命名。如果你x存在,那么你就存在names(x) <- v。这是做到这一点的正确方法。

如果您的变量名未知(即动态创建),那么您可以使用substitute

nm <- "xxx" # name of your variable
v <- 1:3 # value
assign(nm,v) # assign value to variable

w <- c("a","b","c") # names of variable
eval(substitute(names(x)<-w, list(x=as.symbol(nm))))
# Result is
str(xxx)
# Named int [1:3] 1 2 3
# - attr(*, "names")= chr [1:3] "a" "b" "c"

但是,如果您必须使用这种技巧,那么您的代码就有问题。

于 2010-05-25T20:37:21.990 回答
4

尝试这个:

assign(paste(names(x),collapse="."), v)

collapse如果有多个名称,请改用。

> v <- 1:10
> names(v) <- letters[1:10]
> v
 a  b  c  d  e  f  g  h  i  j 
 1  2  3  4  5  6  7  8  9 10 
> assign(paste(names(v), collapse=""), v)
> abcdefghij
 a  b  c  d  e  f  g  h  i  j 
 1  2  3  4  5  6  7  8  9 10
于 2010-05-25T19:52:28.603 回答
4

Marek 的答案有效,但 Aniko 的问题是一个简单的答案。

nm <- "xxx"; v<- 1:3; names(v) <- c("a","b","c"); assign(nm,v)

这是 Aniko 的回答,她应该得到表扬。

我使用它的案例有 >1 个查询类,每个类都有不同的 varname,每个类包含 >1 个 sql 查询。因此,例如,查询类名称为“config_query”,列表中包含三个命名查询,例如“q1”、“q2”、“q3”。并进一步查询类名。我想创建一个循环,将查询类名称的根前缀(例如“config”用于“config_query”)作为列表,获取它们的查询内容,运行查询,并在结果类 varnames 中列出结果数据帧例如“config_result”,这样“config_result”中的每个结果都与“config_query”中的查询具有相同的名称,这是它的结果。

换句话说,我想要免费的结果类 varnames 和相应的名称映射,给定根前缀和初始查询。使用 assign() 分配给结果类 varnames。我被困在如何进行名称映射上。谢谢!

于 2010-05-28T02:51:09.437 回答
0

如果变量的名称作为字符串存储在其他变量(variable_name)中,我将执行以下操作。

temp <- get(variable_name)

names(temp)<- array_of_names

assign(variable_name,temp)
于 2014-06-05T19:18:39.353 回答