我试图操纵一些解析的R代码并使用=运算符遇到困难.正如这个片段所示,我可以得到一个对象,说它的类型是"语言",但是当它在为S4类的一个槽分配值时R使用的"is"测试时返回false.
以下是一些示例代码:
parsed <- parse(text = "cylinders = c(4, 6, 8)")
print (typeof(parsed)) # Prints "expression"
langObj <- parsed[[1]]
print (typeof(langObj)) # Prints "language"
print (is(langObj, "language")) # Prints FALSE
setClass("Foo",
slots = list(
s1 = "language")
)
setMethod ("initialize",
"Foo",
function(.Object, obj){
.Object@s1 <- obj
return (.Object)
}
)
new (Class = "Foo", langObj)
Run Code Online (Sandbox Code Playgroud)
最后一行产生错误:
Error in (function (cl, name, valueClass) :
assignment of an object of class “=” is not valid for @‘s1’ in an object of class …Run Code Online (Sandbox Code Playgroud) 我试图timestamp在Rstudio中调用该函数,但似乎是调用了我想要的版本以外的版本. getAnywhere表明有2个定义:
> getAnywhere(timestamp)
2 differing objects matching ‘timestamp’ were found
in the following places
package:utils
namespace:utils
Use [] to view one of them
> timestamp
function(...) .rs.callAs(name,
hook,
original,
...)
<environment: 0x0000000005f42030>
> timestamp()
##------ Thu Mar 06 15:08:51 2014 ------##
> utils::timestamp
function (stamp = date(), prefix = "##------ ", suffix = " ------##",
quiet = FALSE)
{
stamp <- paste0(prefix, stamp, suffix)
.External2(C_addhistory, stamp)
if (!quiet)
cat(stamp, sep = "\n")
invisible(stamp)
}
<bytecode: 0x0000000005f447a8> …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个空数据框,其中数据将是字符串,并且stringsAsFactors设置为FALSE.但是,当我这样做时,它似乎不记得stringsAsFactors的值.
如果我创建一个空行,它可以工作,如下所示:
> df <- data.frame(a="", b="", stringsAsFactors=FALSE)
> new.row <- c("a", "z")
> df <- rbind(df, new.row)
> df
a b
1
2 a z
> df[2,1] <- "q"
> df
a b
1
2 q z
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个空的数据框.但是,当我这样做时,它会将我后来添加的字符串视为因素:
> df2 <- data.frame(a=character(), b=character(), stringsAsFactors=FALSE)
> df2 <- rbind(df2, new.row)
> df2
X.a. X.z.
1 a z
> df2[2,1] <- "q"
Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "q") :
invalid factor level, NA generated
Run Code Online (Sandbox Code Playgroud)
如何在没有字符串因子的情况下创建空数据框?