我刚刚comment
在R中发现了该函数。示例:
x <- matrix(1:12, 3,4)
comment(x) <- c("This is my very important data from experiment #0234",
"Jun 5, 1998")
x
comment(x)
这是我第一次使用此功能,并且想知道它的常见/有用用法。由于在Google中搜索“ R评论”并找到相关结果非常困难,因此我希望这里的人可以与他分享经验。
我刚刚comment
在R中发现了该函数。示例:
x <- matrix(1:12, 3,4)
comment(x) <- c("This is my very important data from experiment #0234",
"Jun 5, 1998")
x
comment(x)
这是我第一次使用此功能,并且想知道它的常见/有用用法。由于在Google中搜索“ R评论”并找到相关结果非常困难,因此我希望这里的人可以与他分享经验。
Answers:
我经常发现自己在R脚本中为特定数据分析任务所做的一件事是在脚本中包含有关数据帧中变量单位的注释。我处理环境数据时,化学家和生态学家似乎很喜欢对相同的事物使用各种不同的单位(mg L与mu eq L等)。我的同事通常将此信息存储在Excel工作表中列名称正下方的行中。− 1
我认为comment()
这是将这些信息附加到数据框以供将来参考的一种好方法。
comment()
不是代码中的注释。它将特定属性附加到可以是矢量的对象上,数据帧的每一列包含一个包含单位信息的元素。提取此信息很容易,所以我不明白为什么实施任何东西都会很困难或不可能?
R
绝对不是维护数据库和执行此类过程的正确位置,即使它能够这样做。最好通过良好的数据库管理系统来补充此类工作。
comment()
等人可以方便地获得临时注释和信息,但是需要更适当的系统来进行大规模数据处理。有趣的是,我们现在必须在我所从事的研究小组和咨询机构中解决有关化学数据的问题,并且需要将其保存到适当的数据库中。
我发现自己做了很多事情,其中之一就是跟踪用于生成数据和对象的命令,并且发现注释对此非常有用。
“ matched.call.data”和“ generate.command.string”可以解决问题。虽然不完美,但很有帮助,并且可以用于'comment()'。:)
# Comments only accept strings...
# Substituting the escaped quotes ('\"') makes it prettier.
generate.command.string <- function( matched.call.data )
{
command.string <- as.character( bquote( .( list( matched.call.data ) ) ) )
sapply( bquote( .(command.string) ),
USE.NAMES=FALSE,
function( x )
gsub( "\\\"", "\'", as.list( match.call() )$x )[[2]] )
}
# Some generating function...
generate.matrix <- function( nrows, ncols, data=NA ) {
# Some generated object
mat <- matrix( data= data, nrow= nrows, ncol= ncols )
matched.call.data <- do.call( "call",
c( list( as.character( match.call()[[1]] ) ),
lapply( as.list( match.call() )[-1], eval ) ) )
comment( mat ) <- c( Generated= date(),
Command = generate.command.string( matched.call.data ) )
mat
}
# Generate an object with a missing argument.
emptyMat <- generate.matrix( nrows=2, ncols=2 )
comment( emptyMat )
# Generate without formally stating arguments.
dataMat <- generate.matrix( 2, 2, sample(1:4, 4, replace= TRUE ) )
comment( dataMat )
# And with a longer command.
charMat <- generate.matrix( 3, 3,
c( 'This', 'is', 'a', 'much', 'longer',
'argument', 'section', 'that', 'wraps') )
comment( charMat )
# And with a variable.
myData <- c( 'An', 'expanded', 'command', 'argument')
charMat2 <- generate.matrix( 2, 2, myData )
comment( charMat2 )
# Create a new object from an original command.
Sys.sleep(1)
emptyMat2 <- eval( parse( text= comment( emptyMat )[['Command']] ) )
dataMat2 <- eval( parse( text= comment( emptyMat )[['Command']] ) )
# Check equality of the static matrices.
identical( emptyMat, emptyMat2 )
# The generation dates are different.
all.equal( emptyMat, emptyMat2, check.attributes= FALSE )
comment( emptyMat )['Generated'] <- NA
comment( emptyMat2 )['Generated'] <- NA
identical( emptyMat, emptyMat2 )
# Command argument structure still works too.
str( as.list( match.call(
generate.matrix, parse( text=comment( charMat2 )[[ 'Command' ]] ) ) )[-1] )