- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 466 个
- 通用积分
- 35.1656
- 学术水平
- 21 点
- 热心指数
- 22 点
- 信用等级
- 20 点
- 经验
- 5726 点
- 帖子
- 467
- 精华
- 0
- 在线时间
- 231 小时
- 注册时间
- 2010-5-20
- 最后登录
- 2022-11-25
|
8楼
zxun(未真实交易用户)
发表于 2015-12-30 21:57:37
关于行标和列标重新命名的问题,我觉得原来的两个函数的colN和rowN的选项是容易出误操作的,于是在新版把这个可选参数取消了。 FunctionName Variables
[1,] "name_rows" "data, info=TRUE"
[2,] "name_cols" "data, info=TRUE"
把按照1,2,3,4...命名的功能放在新函数index里面,这个函数是直接改写原数据的,还增加了撤销功能。
代码会有点长,但是测试出来是无误的:
- #<index>#
- dq.record("index","dt_name, axis=NA, add0=FALSE",
- '
- To automatically rename the rows<axis="r"> or the columns<axis="c">
- of the data.frame called <dt_name> by natural numbers 1,2,3... or V1,V2,V3,...
- <add0=TRUE> can automatically add 0\'s before numbers to the same digits
- e.g. index(\'D\', \'r\', TRUE), to cancel this change, type <index("BACK")>.
- ')
- index <- function( dt_name, axis=NA, add0=FALSE ){
- comm <- function( str ) { eval(parse( text=str )) } #to execute <str>
- add_zero <- function( chr, m=2 ) { #to enlong chr to m digits by adding zero(s)
- z = rep(0, m - nchar(chr) )
- paste(c(z, chr), collapse="")}
-
- if (dt_name =="BACK") {
- comm( paste0( "names(", index.bk.n, ") <<- index.bk.c" ) )
- comm( paste0( "row.names(", index.bk.n, ") <<- index.bk.r" ) )
- message( index.bk.n, " has been restored!" )
- }
- else{
- comm( paste0('index.bk.n <<- "', dt_name, '" ') ) #data name back up
- comm( paste0("index.bk.c <<- names(", dt_name, ")") ) # data col names back up
- comm( paste0("index.bk.r <<- row.names(", dt_name, ")") ) # row names back up
- M = length(index.bk.r); N = length(index.bk.c)
- if( axis =="r" ) {
- row_nm = as.character(1:M)
- if( add0 ){ row_nm = sapply( row_nm, add_zero, m=nchar(M) ) }
- comm( paste0( "row.names(", dt_name, ") <<- row_nm" ) )
- message(dt_name, " has been changed, \n and the upper-left corner is:\n")
- comm( paste0( "print(", dt_name,"[1:min(4,M), 1:min(4,N)] )" ) )
- }
- if( axis =="c" ) {
- col_nm = 1:N
- if( add0 ){ col_nm = sapply( col_nm, add_zero, m=nchar(N) ) }
- col_nm = paste0("V", col_nm )
- comm( paste0( "names(", dt_name, ") <<- col_nm" ) )
- message(dt_name, " has been changed, \n and the upper-left corner is:\n")
- comm( paste0( "print(", dt_name,"[1:min(4,M), 1:min(4,N)] )" ) )
- }
- else {
- message("<axis> must be 'r' or 'c'! ")
- invisible(NA) }
- }
- }
复制代码
|
|