相关疑难解决方法(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
查看次数

运算符"[< - "在RStudio和R中

偶然我遇到了"[<-"操作员的奇怪行为.它的行为会有所不同,具体取决于调用的顺序以及我是使用RStudio还是普通的RGui.我将通过一个例子说清楚.

x <- 1:10
"[<-"(x, 1, 111)
x[5] <- 123
Run Code Online (Sandbox Code Playgroud)

据我所知,第一个分配不应该改变x(或者我可能是错的?),而第二个应该这样做.事实上,上述操作的结果是

x
[1]  1  2  3  4  123  6  7  8  9 10
Run Code Online (Sandbox Code Playgroud)

但是,当我们以不同的顺序执行这些操作时,结果会有所不同并且x已经发生变化!意味深长:

x <- 1:10
x[5] <- 123
"[<-"(x, 1, 111)
x
[1] 111   2   3   4   123   6   7   8   9  10
Run Code Online (Sandbox Code Playgroud)

但它只发生在我使用普通R!在RStudio中,两个选项的行为都是相同的.我在两台机器上检查过它(一台用Fedora,一台用Win7),情况看起来完全一样.我知道'功能'版本("[<-"(x..))可能从未使用过,但我很好奇它为什么会发生.谁能解释一下呢?

==========================

编辑:好的,所以从评论我得到的原因是x <- 1:10类型'整数'和更换后x[5] <- 123的'双'.但仍然存在为什么RStudio的行为不同的问题?我重新启动R会话,它不会改变任何东西.

r rstudio

42
推荐指数
1
解决办法
1391
查看次数

标签 统计

r ×2

levels ×1

rstudio ×1

types ×1