2013-12-09 39 views
2

我有一个一般项字符串:R()的内部colnames

item='shoes' 

然后我使用:

assign(paste0(item,'_list'),lapply(etc)) 

assign(paste0(item,'_df'),sapply(etc)) 

然后我想改变该数据帧 与所述colnames一个特征向量内部名称:

v=c('a','b','c') 

我试着做:

colnames(get(paste0(item,'_df'))=v 

BU我有:

could not find function "get<-" 

错误

+1

我认为像'的eval(解析(paste0( “colnames(” 项目, “_ DF)< - V”))' ,但像往常一样,如果你发现自己使用'eval(parse(...))'你应该重新考虑你的策略,即保持你的单个项目在一个命名列表... –

+0

谢谢我从来没有使用eval(parse() )函数 – user3083330

回答

2

我将创建一个对象是assign() -ed的名字。不知道有第二次转让成功的机会,因为我通常希望sapply返回一个矩阵,而不是一个数据帧,这似乎是你的期望:

assign(paste0(item,'_list'), setNames(lapply(etc), v)) 

assign(paste0(item,'_df'), setNames(sapply(etc), v)) 

names功能将与列表,dataframes和矢量工作,但我认为它与矩阵不太匹配。它不会抛出错误(正如我预期的那样),而是在矩阵上创建一个names属性,看起来很不合适。特别是它不会为矩阵设置rownames或colname。如果你想要的东西,并指定列名的矩阵,这可能取得成功:

setColNames <- function (object = nm, nm) 
{ if (class(object) %in% c("list", "data.frame", "numeric", "character")){ 
    names(object) <- nm 
    return(object) 
    } else{ 
    if (class(object) %in% c("matrix")){ 
    colnames(object) <- nm 
    return(object) 
    } else { object } 
         } 
} 
+0

我会尝试这个解决方案;不知道setNames()函数。 – user3083330