在R中,“assign('x',v)”将名称为'x'的对象设置为v。将'x'替换为将文本函数应用于变量x的结果。然后“分配”显示其价值。如何分配给R中变量值的names()属性
不幸的是,“assign(paste('names(','x',')',sep =''),v)”失败。所以如果'x'是一个变量x,我可以设置它的值,但我不能给它的元素名称。
能解决这个问题吗?一个分析 - 评估技巧也许?谢谢。
在R中,“assign('x',v)”将名称为'x'的对象设置为v。将'x'替换为将文本函数应用于变量x的结果。然后“分配”显示其价值。如何分配给R中变量值的names()属性
不幸的是,“assign(paste('names(','x',')',sep =''),v)”失败。所以如果'x'是一个变量x,我可以设置它的值,但我不能给它的元素名称。
能解决这个问题吗?一个分析 - 评估技巧也许?谢谢。
试试这个:
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
我不认为这就是Tony想要的。他希望将名称分配给名称在程序中创建的变量。 – Aniko 2010-05-26 13:57:11
在提问的形式中,不需要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"
但是如果你必须做这样的把戏有什么不对你的代码。
马立克的答案有用,但安子的问题是一个简单的答案。
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。我被困在如何做名字映射。谢谢!
这听起来像你需要列表。像'queries = list(config = list(query = list(q1,q2,...),results = ...)'。使用'assign'你会遇到问题,例如当你想改变名称对于结果中的某一列。 – Marek 2010-05-29 21:00:09
如果变量的名称作为字符串存储在其他变量(variable_name)中,我将执行以下操作。
temp <- get(variable_name)
names(temp)<- array_of_names
assign(variable_name,temp)
你能举一个x的例子吗? – Shane 2010-05-25 19:53:05
你不能只给'v'的名字给''x''吗? – Aniko 2010-05-26 13:57:47