source
d或Sweave
d文件如何找到自己的路径?
背景:
我使用.R脚本或.Rnw文件工作了很多.我的项目是在一个目录结构中组织的,但是项目基本目录的路径经常在不同的计算机之间变化(例如,因为我只为其他人做了部分数据分析,他们的目录结构与我的不同:我有项目基目录〜/ Projects/StudentName /或〜/ Projects/Studentname/Projectname和大多数只拥有一个项目的学生通常在〜/ Measurements /或〜/ DataAnalysis /或类似的东西下 - 这对我不起作用).
所以像一条线
setwd (my.own.path ())
Run Code Online (Sandbox Code Playgroud)
将是非常有用的,因为它将允许确保工作目录是项目的基本路径,无论该项目实际在哪里.无需用户必须考虑设置工作目录.
让我澄清一下:我寻找的解决方案可以按下不假思索的用户的编辑器/ IDE source
或Sweave
键盘快捷键.
我是从开关Sweave
到knitr
和非常喜欢它.非常感谢Yihui!
让我烦恼的一件事是剧情窗口弹出并变得活跃.因此,当我在knitr
工作时写作时,我的编辑经常会失去焦点.即使代码块中没有生成绘图,也会发生这种情况.
有办法避免这种情况吗?
这是我的sessionInfo ()
,如果有帮助:
R version 2.15.0 (2012-03-30) Platform: x86_64-unknown-linux-gnu (64-bit) locale: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C [3] LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 [5] LC_MONETARY=de_DE.UTF-8 LC_MESSAGES=de_DE.UTF-8 [7] LC_PAPER=C LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] grid stats graphics grDevices utils datasets methods [8] base other attached packages: [1] hyperSpec.sim_0.5 mvtnorm_0.9-9992 hyperSpec_0.98-20120531 [4] lattice_0.20-6 knitr_0.5 loaded via a namespace (and not attached): [1] arrayhelpers_0.75-20120531 codetools_0.2-8 [3] digest_0.5.2 evaluate_0.4.2 [5] formatR_0.4 highlight_0.3.1 [7] parser_0.0-14 …
我的hyperSpec
包提供了处理光谱数据集的功能.我为来自其他软件包的许多功能提供了hyperSpec方法.但是,其中一些其他软件包,我已经列出,Suggests:
因为我不想强迫用户安装20个其他软件包(计算依赖项),如果它们可能永远不会使用特定功能.
从编码的角度来看,这很有效.但是,我不知道如何在.Rd文件中处理它 - 但我确信这是一个相当普遍的问题.
通常\code{\link[otherpkg]{fun}}
不会可靠地工作,因为不能保证otherpkg可用.如果未安装otherpkg,则链接断开.这将通过R CMD check
例如Winbuilder和r-forge 检测到.这意味着:包不会通过CRAN检查.
哪个包是个好例子?
到目前为止我找到的唯一提示(虽然没有解决方案):https://stat.ethz.ch/pipermail/r-devel/2009-November/055425.html(但该电子邮件没有答案).
我刚刚遇到(好奇)问题,在向一些Elsevier期刊提交(pdf)LaTeX手稿时,需要完成数字的文件名,以便通过他们的pdf构建和检查系统找到,即:
\includegraphics{picture.pdf}
Run Code Online (Sandbox Code Playgroud)
有没有简单方便的方法告诉Sweave或knitr这样做?
编辑:
include=FALSE
选择utils:::RweaveLatexRuncode
但是,目前我希望有更方便和优雅的东西.
它也是关于分发.Rnw文件作为补充材料或小插曲.从教学的角度来看,我不喜欢这些调整,这些调整使源代码对于我希望他们阅读它的新用户来说更加复杂.
(这也是我真正欣赏最近print=TRUE
在Sweave 推出的原因)
有没有办法代码的R包可以找出哪些属于包或命名空间?
背景:我发现在包名称不同的包之间有共同的代码.一个常见的例子是tests/testthat.R
:
library(testthat)
library(ShiftedExcitation)
test_check("ShiftedExcitation")
Run Code Online (Sandbox Code Playgroud)
如果代码可以找出它所属的包或命名空间,我可以避免现在给出包名的许多地方.
现在我定义一个包含包名称的隐藏变量
.PKG <- "ShiftedExcitation"
然后用东西线沿线的*
library(testthat)
library(.PKG, character.only = TRUE)
test_check(.PKG)
Run Code Online (Sandbox Code Playgroud)
但我很好奇是否存在更优雅的解决方案.
*到目前为止,我没有得到这个工作,因为testthat.R
在包命名空间之外进行了评估.但它确实可以用于unittest
在包代码中定义函数.
我有一个显示的矩阵imagesc
.现在我被要求制作一个"插补"版本(即显示更平滑的颜色).
虽然我可以计算一个更大的插值矩阵,但我似乎记得有一个命令在两种这样的显示模式之间切换,无论是风格的一个小命令axis equal
还是一些属性 - 但我找不到它.
我注意到,定义as.matrix
或as.data.frame
如S3方法的S4类使得如lm (formula, objS4)
和prcomp (object)
工作的开箱.如果将它们定义为S4方法,则不起作用.
为什么将方法定义为S3或S4方法至关重要?
示例as.data.frame
:
setClass ("exampleclass", representation (x = "data.frame"))
object <- new ("exampleclass", x = iris)
setMethod ("as.data.frame", signature="exampleclass", definition= function (x, ...) x@x )
## [1] "as.data.frame"
as.data.frame (object)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## ...snip...
lm (Petal.Length ~ Petal.Width, object)
## error in …
Run Code Online (Sandbox Code Playgroud) 我正在knitr
用来生成报告.但是,我经常首先准备包含所有情节的"内部"文件,然后对于最终报告或纸张只想包含一些数字.
说,我有一套系统生成的数字,说我循环我的标本:
<<sample, fig.keep = 'all'>>=
specimen <- c("436a", "783a", "10b")
for (s in specimen) # in reality it would e.g. be levels (specimen)
plot (results [s])
@
Run Code Online (Sandbox Code Playgroud)
这将产生许多文件figures/sample1.pdf
,figures/sample2.pdf
等等.虽然编号为1,2,...对于针织生成的报告是好的,如果我想在纸张中包含其中一个图表,那么它很麻烦并且容易出错找出哪个.pdf属于哪个样本.
如何判断knitr
使用文件名"figures/sample-436a.pdf"
?
我尝试过<<fig.path = sprintf ("figures/sample-%s", s)>>=
,但这不起作用:s
未知,所以我猜fig.path
是在块处理开始时评估,而不是在保存块时.
PS:减少错误风险的一个显而易见的方法是标题,但这是恕我直言,在纸上丑陋.