0

我正在尝试使用分配函数重命名时间序列的列,如下所示 -

assign(colnames(paste0(<logic_to_get_dataset>)),
c(<logic_to_get_column_names>))

我收到警告:In assign(colnames(get(paste0("xvars_", TopVars[j, 1], "_lag", : only the first element is used as variable name

此外,不会发生列名分配。我认为这是因为 colnames() 函数而发生的。有解决方法吗?

4

2 回答 2

0

来了——

    temp_var <- paste0('colnames(var_',TopLines[j,1],'_lag',get(paste0('uniqLg_',TopLines[j,1]))[k,],'_',get(paste0('uniqLg_',TopLines[j,1]))[k,]+12 , 
       ') <-  c(gsub( "xt',get(paste0('uniqLg_',TopLines[j,1]))[k,],'" , "xt',get(paste0('uniqLg_',TopLines[j,1]))[k,],'__',get(paste0('uniqLg_',TopLines[j,1]))[k,]+12, 
       '", colnames(var_',TopLines[j,1],'_xt',get(paste0('uniqLg_',TopLines[j,1]))[k,],')))')

print(temp_var )

eval(parse( text=temp_var ))

其中 TopLines 是具有一列的数据框,包含行列表。这种方法的唯一问题是,除非我实际打开数据集并查看更改是否受到影响,否则我无法测试 eval 的输出。

于 2015-04-20T22:05:20.147 回答
0

问题是 assign 只查看向量的第一个元素。

你可以试试这个,例如:

df = data.frame(x = 1:3, y = 4:2)
within(df, assign(colnames(df),c('a','b'))

您会注意到 R 只查看第一个变量,并尝试将这些列名称描述的值重新分配给第二个值。这种行为显然不是你想要的。

不幸的是,它有点老套,但你总是可以使用这样的东西

data.frame.name = get_df()#some function that returns text
data.frame.columns = get_cols()#some function that returns text
eval(parse(text = paste0('colnames(',data.frame.name,') = c(',
 paste(data.frame.columns,collapse = ','),')')))

我宁愿避免做这些类型的表达,但它应该按预期工作。

于 2015-04-20T20:10:32.567 回答