小编Pie*_*rre的帖子

使用@直接访问S4对象插槽是不好的做法?

这个问题几乎是一个哲学问题:直接使用访问和/或设置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)

r s4

19
推荐指数
4
解决办法
6544
查看次数

是否可以在包装插图中使用非导入的包?

我正在为我的一个包裹写一个小插图.

在这个小插曲,我想演示如何这个包可以与被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

r

18
推荐指数
2
解决办法
1203
查看次数

如何评估data.frame中的调用?

在我正在研究的一个软件包中,我遇到了一个看似简单的问题 - 但我无法弄清楚:

子函数有两个参数:

  • obj, 一个 data.frame
  • foo, 一个 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)

r dataframe

12
推荐指数
1
解决办法
408
查看次数

将包上传到CRAN传入时出错:550访问被拒绝

我正在尝试在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)

知道我做错了什么吗?

ftp r cran

7
推荐指数
1
解决办法
1617
查看次数

如何将矢量值与R中颜色渐变的颜色相匹配?

这在R中可能是一件微不足道的事情,但我找不到任何内置函数来做到这一点:

在给定颜色渐变的情况下,如何将值向量(比如数值)转换为颜色向量.

r transform vector

6
推荐指数
1
解决办法
6144
查看次数

apply()为每列提供NA值

我最近一直遇到这个奇怪的问题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包含numericcharacter数据时,它似乎失败了:

apply(df, 2, mean)
speed  dist   foo 
   NA    NA    NA …
Run Code Online (Sandbox Code Playgroud)

r apply

5
推荐指数
2
解决办法
6135
查看次数

使用data()作为通用S4函数

我正在尝试为类定义一个新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 s4

3
推荐指数
1
解决办法
885
查看次数

如何使用Python更改文件的字段分隔符?

我是来自R世界的Python新手,我正在研究大文本文件,结构化数据列(这是LiDaR数据,因此通常有6000万条+记录).

是否可以更改这样一个大文件的字段分隔符(例如从制表符分隔到逗号分隔),而无需读取文件并for在行上循环?

python separator lidar

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

r ×7

s4 ×2

apply ×1

cran ×1

dataframe ×1

ftp ×1

lidar ×1

python ×1

separator ×1

transform ×1

vector ×1