在 R 中,“assign('x',v)”将名称为“x”的对象设置为 v。将“x”替换为将文本函数应用于变量 x 的结果。然后“分配”显示它的价值。
不幸的是,“assign(paste('names(','x',')',sep=''),v)”失败了。所以如果'x'是一个变量x,我可以设置它的值,但我不能给它的元素命名。
可以解决这个问题吗?也许是解析评估技巧?谢谢。
在 R 中,“assign('x',v)”将名称为“x”的对象设置为 v。将“x”替换为将文本函数应用于变量 x 的结果。然后“分配”显示它的价值。
不幸的是,“assign(paste('names(','x',')',sep=''),v)”失败了。所以如果'x'是一个变量x,我可以设置它的值,但我不能给它的元素命名。
可以解决这个问题吗?也许是解析评估技巧?谢谢。
在您提出问题的表格中,无需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"
但是,如果您必须使用这种技巧,那么您的代码就有问题。
尝试这个:
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
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。我被困在如何进行名称映射上。谢谢!
如果变量的名称作为字符串存储在其他变量(variable_name)中,我将执行以下操作。
temp <- get(variable_name)
names(temp)<- array_of_names
assign(variable_name,temp)