相关疑难解决方法(0)

`level <-`(这是什么巫术?

在回答另一个问题时,@ Mayk发布了以下解决方案:https://stackoverflow.com/a/10432263/636656

dat <- structure(list(product = c(11L, 11L, 9L, 9L, 6L, 1L, 11L, 5L, 
                                  7L, 11L, 5L, 11L, 4L, 3L, 10L, 7L, 10L, 5L, 9L, 8L)), .Names = "product", row.names = c(NA, -20L), class = "data.frame")

`levels<-`(
  factor(dat$product),
  list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
  )
Run Code Online (Sandbox Code Playgroud)

哪个产生输出:

 [1] Generic Generic Bayer   Bayer   Advil   Tylenol Generic Advil   Bayer   Generic Advil   Generic Advil   Tylenol
[15] Generic Bayer   Generic Advil   Bayer   Bayer  
Run Code Online (Sandbox Code Playgroud)

这只是矢量的打印输出,所以要存储它你可以做得更加困惑:

res <- `levels<-`(
  factor(dat$product),
  list(Tylenol=1:3, Advil=4:6, Bayer=7:9, Generic=10:12)
  )
Run Code Online (Sandbox Code Playgroud)

显然这是对level函数的某种调用,但我不知道这里做了什么.这种巫术的术语是什么,我如何在这个领域增加我的魔法能力?

types r levels

110
推荐指数
4
解决办法
6188
查看次数

了解自定义就地修改功能的代码?

我遇到了这篇文章:来自Matt Dowle的http://r.789695.n4.nabble.com/speeding-up-perception-tp3640920p3646694.html,早些时候讨论过一些问题?data.table包的实施思路.

他使用以下代码:

x = list(a = 1:10000, b = 1:10000) 
class(x) = "newclass" 
"[<-.newclass" = function(x,i,j,value) x      # i.e. do nothing 
tracemem(x)
x[1, 2] = 42L 
Run Code Online (Sandbox Code Playgroud)

具体来说,我在看:

"[<-.newclass" = function(x,i,j,value) x
Run Code Online (Sandbox Code Playgroud)

我试图了解那里做了什么以及如何使用这种表示法.

它看起来像我:

  • 我是行索引
  • j是列索引
  • value是要分配的值
  • x是正在考虑的对象

因此,我最好的猜测是我为现场修改定义了一个自定义函数(对于给定的类).

[<-.newclass 是类newclass的类修改.

了解发生的情况:通常以下代码应返回错误:

x = list(a = 1:10000, b = 1:10000) 
x[1, 2] = 42L 
Run Code Online (Sandbox Code Playgroud)

所以我想示例代码没有任何实际用途.

尝试使用逻辑:

一个简单的无意义尝试就是将要插入的值平方:

x[i, j] <- value^2
Run Code Online (Sandbox Code Playgroud)

全面尝试:

> x = matrix(1:9, 3, 3)
> class(x) = "newclass"
> "[<-.newclass" = function(x, …
Run Code Online (Sandbox Code Playgroud)

r data.table

13
推荐指数
1
解决办法
228
查看次数

R参考类中的非标准集函数

是否有可能获得语法

foo$bar(x) <- value
Run Code Online (Sandbox Code Playgroud)

工作在哪里foo是一个引用类对象,bar是一个方法?即是可以做"子集分配"并将"替换函数"作为参考类中的方法吗?

是否可以使用其他OO系统获得语法?

示例: 我将用一个用例说明.想象一个引用类,Person它包含一个人的一些基本信息.特别是,一个叫做的字段fullname名为list:

PersonRCGen <- setRefClass("Person",
                           fields = list(
                             fullname = "list",
                             gender = "character"
                           ))
Run Code Online (Sandbox Code Playgroud)

接下来,我们应该定义一些方法来获取和设置fullnames列表中的特定名称(尝试)给出上面的语法/接口.到目前为止,我最好的尝试是:

PersonRCGen$methods(
  name = function(x) { # x is the dataset,
    .self$fullname[[x]]
  },
  `name<-` = function(x, value) {
    .self$fullname[[x]] <- value
  }
)
Run Code Online (Sandbox Code Playgroud)

这里的命名也应该说明我正在尝试做什么.

我们初始化一个新对象:

a_person <- PersonRCGen$new(fullname = list(first = "Jane", last = "Doe"),
                            gender = "F")
Run Code Online (Sandbox Code Playgroud)

fullname直接访问字段并通过定义的get函数访问名字和姓氏按预期工作:

a_person$fullname
#$`first`
#[1] "Jane"
# 
#$last
#[1] …
Run Code Online (Sandbox Code Playgroud)

r reference-class

10
推荐指数
1
解决办法
152
查看次数

什么是setReplaceMethod()以及它是如何工作的?

我对使用它感到困惑setReplaceMethod().看着?setReplaceMethod没有提供解释,谷歌搜索不是很有帮助.

问题:请解释setReplaceMethod(),它的用法及其工作原理(最好以一个例子为准).

r s4

8
推荐指数
2
解决办法
501
查看次数

R 如何评估这些奇怪的表达式?

我试图在 R(例如,a, *b, c = [1,2,3], "C")中使 Python 3 样式的赋值解包成为可能,尽管我非常接近(您可以在此处查看我的代码),但我最终还是遇到了一些(奇怪的)问题。

我的代码是这样工作的:

a %,*% b %,% c <- c(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

并将分配a= 1b=c(2,3,4)c= 5(我的代码实际上确实做到了这一点,但有一个小问题我稍后会讲到)。

为了让它做任何事情,我必须定义:

`%,%` <- function(lhs, rhs) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

`%,%<-` <- function(lhs, rhs, value) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

(以及%,*%%,*%<-,它们是先前函数的轻微变体)。

第一个问题:为什么[R替代*tmp*lhs参数

据我所知,R 首先从左到右评估这段代码(即,从ac,直到它到达最后一个%,%,然后,它从右到左返回,沿途分配值。但是第一个我注意到的奇怪的事情是,当我做match.call()substitute(lhs)在类似的事情中x %infix% …

evaluation r infix-operator iterable-unpacking

8
推荐指数
1
解决办法
91
查看次数

R中的引用调用(使用函数修改对象)

我只是在R中弄湿了,并且惊讶地看到一个函数没有修改一个对象,至少它似乎是默认的.例如,我写了一个函数只是为了在表中的一个标签上粘贴一个星号; 它在函数内部工作,但表本身不会更改.(我主要来自Ruby)

那么,使用函数来改变R中对象的正常,可接受的方式是什么?如何在表格标题中添加星号?

  • 替换整个对象: myTable = title.asterisk(myTable)

  • 使用解决方法通过引用进行调用(例如,在TszKin Julian的R中通过引用调用中所描述的?

  • 使用函数以外的一些结构?对象方法?

r function

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

关于R,在定义替换函数时,参数必须命名为/ like"x"和"value"吗?

通过"替换函数"我的意思是在这个线程中提到的什么是R中的替换函数?,看起来像'length<-'(x, value).当我使用这些功能时,我遇到了一些奇怪的东西.似乎替换函数仅在根据特定规则命名变量时才起作用.

这是我的代码:

a <- c(1,2,3)
Run Code Online (Sandbox Code Playgroud)

我将尝试a使用下面的3个替换函数之一更改第一个元素.

'first0<-' <- function(x, value){
  x[1] <- value
  x
}

first0(a) <- 5
a
# returns [1] 5 2 3.
Run Code Online (Sandbox Code Playgroud)

第一个工作得很好......但是当我更改定义中的参数名称时,

'first1<-' <- function(somex, somevalue){
  somex[1] <- somevalue
  somex
}

first1(a) <- 9
# Error in `first1<-`(`*tmp*`, value = 9) : unused argument (value = 9)
a
# returns [1] 5 2 3
Run Code Online (Sandbox Code Playgroud)

它无法工作,但以下代码没问题:

a <- 'first1<-'(a, 9)
a
# returns [1] 9 2 3
Run Code Online (Sandbox Code Playgroud)

其他一些名字很好地工作也是如此,如果它们类似于x和 …

r function

5
推荐指数
1
解决办法
421
查看次数

R找不到功能

我正在尝试重命名列而不创建对象(数据帧).

当我跑:

names(data.frame(cbind(LETTERS[1:3],1:3)))[1]<-"A"
Run Code Online (Sandbox Code Playgroud)

我明白了:

Error in names(data.frame(cbind(LETTERS[1:3], 1:3)))[1] <- "A" : could not find function "data.frame<-"
Run Code Online (Sandbox Code Playgroud)

如果我跑:

X<-data.frame(cbind(LETTERS[1:3],1:3))
colnames(X)[1]<-"letters"
X
Run Code Online (Sandbox Code Playgroud)

我会看到列名更改,因为我创建了一个数据框然后更改了它.我很确定除了对象创建之外,这两个代码片段是相同的.我不知道R是否只是在这个功能上不灵活,我必须有时创建对象而不是其他对象.但错误"......找不到功能"对我来说似乎有些奇怪.有人可以解释这个错误吗?

r

4
推荐指数
2
解决办法
2648
查看次数

函数名称在R中的单引号中

这可能是一个愚蠢的问题,但我已经困扰了很长一段时间.我看到人们在定义函数时使用单引号括起函数名.我一直在想这样做的好处.以下是一个天真的例子

'row.mean' <- function(mat){
    return(apply(mat, 1, mean))
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

r function

4
推荐指数
1
解决办法
727
查看次数

查找所有单词末尾或点前面带有“&lt;-”的单词

我如何提取所有<-在单词末尾或介于两者之间带有符号“ ”的单词,但在后一种情况下,仅当“ <-”符号后跟一个点时。

把它放在上下文中。练习 6.5.3 的哈德利Wickhams -预研 要求读者列出基本包所有替代函数。

只有一种方法的替换函数由<- 函数名称末尾的符号表示。但是,泛型函数的方法名称附加到替换形式的名称(带一个点),这样<-不再位于函数名称的末尾。例子split<-.data.frame

编辑:

obj <- mget(ls("package:base"), inherits = TRUE)
funs <- Filter(is.function, objs)
Run Code Online (Sandbox Code Playgroud)

这就是您提取基础包中所有功能的方式。现在我只想找到替换功能。

regex r

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