这个问题几乎是一个哲学问题:直接使用访问和/或设置S4对象的插槽是不是很糟糕@?
我一直被告知这是不好的做法,并且用户应该使用"访问者"S4方法,开发者应该为他们的用户提供这些.但我想知道是否有人知道这背后的真实交易?
这是使用sp包的示例(但可以针对任何S4类进行推广):
> library(sp)
> foo <- data.frame(x = runif(5), y = runif(5), bar = runif(5))
> coordinates(foo) <- ~x+y
> class(foo)
[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"
> str(foo)
Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
..@ data :'data.frame': 5 obs. of 1 variable:
.. ..$ bar: num [1:5] 0.621 0.273 0.446 0.174 0.278
..@ coords.nrs : int [1:2] 1 2
..@ coords : num [1:5, 1:2] 0.885 0.763 0.591 0.709 0.925 ...
.. …Run Code Online (Sandbox Code Playgroud) 我正在为我的一个包裹写一个小插图.
在这个小插曲,我想演示如何这个包可以与被otehr包互动不是由进口NAMESPACE或由Imports一节的DESCRIPTION文件.
所以,我正require打电话在我的小插图中使用这些外部包,NOTE但当我尝试R CMD check使用包时,我当然得到以下内容:
* checking for unstated dependencies in vignettes ... NOTE
‘library’ or ‘require’ call not declared from: ‘RColorBrewer’
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,或者我应该导入这些外部包装还是"假装"使用小插图eval=FALSE?
在我正在研究的一个软件包中,我遇到了一个看似简单的问题 - 但我无法弄清楚:
子函数有两个参数:
obj, 一个 data.framefoo, 一个 call例如:
> head(obj)
cadmium copper lead zinc elev
1 11.7 85 299 1022 7.909
2 8.6 81 277 1141 6.983
3 6.5 68 199 640 7.800
4 2.6 81 116 257 7.655
5 2.8 48 117 269 7.480
6 3.0 61 137 281 7.791
> foo
log(cadmium)
> class(foo)
[1] "call"
Run Code Online (Sandbox Code Playgroud)
在那个例子中,我想创建一个向量x <- log(obj$cadmium).我怎么做?我尝试使用,with()但我没有得到预期的结果:
> with(obj, foo)
log(cadmium)
Run Code Online (Sandbox Code Playgroud)
foo是用户通过在data.frame的列上指定转换而创建的调用obj:
my_function(obj, foo …Run Code Online (Sandbox Code Playgroud) 我正在尝试在CRAN上传第一个版本的软件包,但我无法通过FTP上传.
好像我没有对ftp://cran.r-project.org/incoming的写访问权限:
550 Access is denied.
Could not download /home/roudierp/Documents/CODE/lhs/fresh_meat/clhs_0.4-2.tar.gz from local filesystem
There were 1 files or directories that could not be transferred. Check the log for which items were not properly transferred.
Run Code Online (Sandbox Code Playgroud)
我尝试使用两个文件浏览器(Dolphin和Konqueror),两个基于GUI的FTP客户端(FireFTP和GFTP)以及良好的ol' ftp命令行界面,但没有成功.
我用作用anonymous户名,我的电子邮件地址或根本没有用作密码.
我也尝试使用curl并明确禁用EPSV按照这篇文章:
curl --disable-epsv -T clhs_0.4-2.tar.gz ftp://cran.R-project.org/incoming/
Run Code Online (Sandbox Code Playgroud)
但我仍然得到访问拒绝错误:
curl: (25) Failed FTP upload: 550
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
这在R中可能是一件微不足道的事情,但我找不到任何内置函数来做到这一点:
在给定颜色渐变的情况下,如何将值向量(比如数值)转换为颜色向量.
我最近一直遇到这个奇怪的问题apply.请考虑以下示例:
set.seed(42)
df <- data.frame(cars, foo = sample(LETTERS[1:5], size = nrow(cars), replace = TRUE))
head(df)
speed dist foo
1 4 2 E
2 4 10 E
3 7 4 B
4 7 22 E
5 8 16 D
6 9 10 C
Run Code Online (Sandbox Code Playgroud)
我想用它apply来对每一列应用一个函数fun(比方说mean)data.frame.如果data.frame只包含numeric值,我没有任何问题:
apply(cars, 2, mean)
speed dist
15.40 42.98
Run Code Online (Sandbox Code Playgroud)
但是在尝试使用我的data.frame包含numeric和character数据时,它似乎失败了:
apply(df, 2, mean)
speed dist foo
NA NA NA …Run Code Online (Sandbox Code Playgroud) 我正在尝试为类定义一个新data方法foo.我的foo对象遵循以下结构:
setClass(Class = "foo",
representation = representation(
data = "data.frame",
id = "character",
wl = "numeric"
)
)
Run Code Online (Sandbox Code Playgroud)
该data方法我试图创造实际访问的内容@data槽:
setMethod("data", "foo",
function(object)
object@data
)
Run Code Online (Sandbox Code Playgroud)
我一直在查看Writing R Extensions手册的第7.1节,但它只涉及S3类.我也看过这篇文章,但没有成功:
setGeneric("data", function(object, ...) standardGeneric('data'))
setMethod("data", "ANY", utils::data)
setMethod("data", "foo",
function(object)
object@data
)
Run Code Online (Sandbox Code Playgroud)
加载包装时:
> data(mtcars)
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "data", for signature "data.frame"
Run Code Online (Sandbox Code Playgroud) 我是来自R世界的Python新手,我正在研究大文本文件,结构化数据列(这是LiDaR数据,因此通常有6000万条+记录).
是否可以更改这样一个大文件的字段分隔符(例如从制表符分隔到逗号分隔),而无需读取文件并for在行上循环?