我想使用该evaluate软件包模拟执行(大量)r脚本,同时使用evaluate记录输出.Evaluate旨在完成这项工作,它几乎可以开箱即用.但是,当使用Rscript时,用户通过命令行传递参数,这些参数--args在R中使用base::commandArgs函数检索.
有没有明智的方法可以覆盖--args正在运行的R会话中的值,以便使用R脚本base::commandArgs()可以按预期工作而无需修改脚本本身?
我正在寻找一种有效的解决方案(递归地)将嵌套列表(任意深度)展平为非嵌套的1深度列表.列表元素不是同类的,因此它们不应该被列入向量中(将所有值强制转换为单个类型).目前为止最好的解决方案是:
flatlist <- function(mylist){
lapply(rapply(mylist, enquote, how="unlist"), eval)
}
Run Code Online (Sandbox Code Playgroud)
这几乎符合我的要求:
> flatlist(list(foo=TRUE, bar=456, pets=list(cat="meeuw", dog="woof")))
$foo
[1] TRUE
$bar
[1] 456
$pets.cat
[1] "meeuw"
$pets.dog
[1] "woof"
Run Code Online (Sandbox Code Playgroud)
但是,问题在于rapply丢弃NULL值,这是不希望的:
> flatlist(list(foo=123, bar=NULL))
$foo
[1] 123
Run Code Online (Sandbox Code Playgroud)
我想这些NULL元素出现在输出中,无论是作为NULL还是作为NA.还有双循环,enquote然后eval使事情有点慢.此函数在我的代码中广泛使用.有没有办法在一次运行中完成所有操作?
我编译的程序,对OpenSSL的静态库链接libssl.a和libcrypto.a其附带libssl-dev的是Debian / Ubuntu Linux系统。但是,这些文件的实际位置取决于当前的体系结构和分发。
我可以在Makefile中使用某种方法或环境变量来为链接器提供带有静态库的系统目录的正确路径吗?目前,我正在使用:
-L/usr/lib/x86_64-linux-gnu/ -L/usr/lib/i686-linux-gnu/ -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)
但是,如果这些目录不存在,并且可能仍然无法正常工作,则会给出一系列警告。
为了分发我的Ubuntu包,我用debuild -S它创建源包,然后将其上传到启动板,启动板创建二进制包.这很方便.但是,我注意到我的源包的大小正在快速增长,因为我的所有包都包含一个.git包含在所有源包中的目录.
设置全局选项的方法是什么,以便debuild/dpkg .git在创建源包时始终跳过任何目录?
我决定给参考课另一个镜头,但我的第一个问候世界已经给了我一些问题.这里出了什么问题?
> memory <- setRefClass(
+ Class = "memory",
+ fields = list(state="vector"),
+ methods = list(
+ get = function() { return(state) },
+ set = function(x) { state <<- x }
+ )
+ )$new()
> memory$set(123)
> print(memory)
Reference class object of class "memory"
Field "state":
[1] 123
> memory$get()
[1] 123
> print(memory)
Reference class object of class "memory"
Field "state":
Error in methods::show(field(fi)) :
error in evaluating the argument 'object' in selecting a method for …Run Code Online (Sandbox Code Playgroud) R 中是否有本地方法来测试磁盘上的文件是 ASCII 文本文件还是二进制文件?类似于fileLinux中的命令,但是可以跨平台工作的方法吗?
该file.info()函数可以区分文件和目录,但似乎并没有超出这一范围。
是否有一个等同substring于raw在载体R?
假设我有一个大的二进制原始向量x,例如使用读取文件的结果readBin.现在我常常grepRaw在原始向量中找到我想要访问的一些片段的索引.玩具示例:
x <- charToRaw("foobar");
n <- 2;
m <- 5;
Run Code Online (Sandbox Code Playgroud)
现在我想从位置2和5中提取"子串".本地方法是:
x[n:m]
Run Code Online (Sandbox Code Playgroud)
然而,这对于大片段来说很难缩放,因为R首先创建一个大向量n:m,然后迭代这个向量以x逐个从这些索引中提取元素.是否有更原生的方法来提取raw矢量的一部分,类似于substr字符矢量?我不认为我可以使用,rawToChar因为文件可能包含非文本二进制数据.
有没有办法以编程方式区分包环境和非包环境对象?例如,对象x及其y下面都是环境,具有相同的类和属性.
x <- as.environment(cars)
y <- getNamespace("graphics")
Run Code Online (Sandbox Code Playgroud)
但从print方法来看,存在差异:
> print(x)
<environment: 0x1d38118>
> print(y)
<environment: namespace:graphics>
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个任意对象,我怎样才能确定它是哪一个(不看输出print)?我想知道这个,以确定如何将对象存储在磁盘上.在前者的情况下,我需要存储环境的列表表示(可能还有它的父项),但对于后者,我只会存储包的名称和版本.
我想在我的包中调用表单时更改call.参数的默认值stop()。因此,这些包包含一个(非导出)版本,stop该版本使用另一个默认值:
stop <- function(..., call. = FALSE, domain = NULL){
base::stop(..., call. = call., domain = domain);
}
Run Code Online (Sandbox Code Playgroud)
这符合我的意图stop("my error")。但是,当stop使用条件对象调用时,它会给出一个额外的警告:
> stop(simpleError("foo"))
Error: foo
In addition: Warning message:
In base::stop(..., call. = call., domain = domain) :
additional arguments ignored in stop()
Run Code Online (Sandbox Code Playgroud)
错误由 r-base 在stop.R中引发。除了参数的不同默认值之外,我如何编写一个stop与 完全相同base::stop的call.函数?