有没有办法定义方法的参数缺失或NULL时会发生什么?
在下面的例子中,无论是键入foo()还是键入,我都想调用相同的函数foo(NULL).当然我知道我可以有一个方法,setMethod("foo","NULL",function(x) foo()) 但那是代码复制和可能的错误来源.
谢谢!
setGeneric("foo",function(x) standardGeneric("foo"))
setMethod("foo","numeric",function(x) "numeric")
setMethod("foo","NULL",function(x) "NULL")
setMethod("foo","missing",function(x) "missing")
R> foo(1)
[1] "numeric"
R> foo()
[1] "missing"
R> foo(NULL)
[1] "NULL"
Run Code Online (Sandbox Code Playgroud) 我想有一个函数调用subset,并传递一个subset参数:
df <- data.frame(abc=c("A","A","B","B"),value=1:4)
subset(df,abc=="A")
## works of course:
# abc value
#1 A 1
#2 A 2
mysubset <- function(df,ssubset)
subset(df,ssubset)
mysubset(df,abc=="A")
## Throws an error
# Error in eval(expr, envir, enclos) : object 'abc' not found
mysubset2 <- function(df,ssubset)
subset(df,eval(ssubset))
mysubset2(df,expression(abc=="A"))
## Works, but needs expression
Run Code Online (Sandbox Code Playgroud)
我尝试过substitute,但无法找到合适的组合.我怎样才能使这个工作?
merge是一个非常好的函数:它合并矩阵和data.frames,并返回data.frame.
拥有相当大的字符矩阵,还有另一种合并的好方法 - 没有data.frame转换吗?
注释1:将命名向量与矩阵或data.frame合并的小函数.矢量元素可以链接到矩阵中的多个条目:
expand <- function(v,m,by.m,v.name='v',...) {
df <- do.call(rbind,lapply(names(v),function(x) {
pos <- which(m[,by.m] %in% v[x])
cbind(x,m[pos,],...)
}))
colnames(df)[1] <- v.name
df
}
Run Code Online (Sandbox Code Playgroud)
例:
v <- rep(letters,each=3)[seq_along(letters)]
names(v) <- letters
m <- data.frame(a=unique(v),b=seq_along(unique(v)),stringsAsFactors=F)
expand(v,m,'a')
Run Code Online (Sandbox Code Playgroud) PDF可以在几个部分中定义透明度(参见此处):
作为图形样式属性:
/ca)或stroke opacities(/CA)填充到1.0以下\SMask)或者使用透明度页面组(/S /Transparency)的定义.
以下grep表达式是对此的快速(和脏)检查:
grep -aE -e '/[Cc][Aa] +0?\.[0-9]' -e '/SMask' -e '/S /Transparency' *.pdf
Run Code Online (Sandbox Code Playgroud)
是否可以检查是否有透明物体gs?