在R中,"df[] <-"是什么意思?

14

问题很简单,我在谷歌和stackoverflow上进行了快速搜索。我在另一个帖子中找到了这个:In aggregate: sum not meaningful for factors

df[] <- lapply(df, function(x) type.convert(as.character(x)))

df[] 如何工作?


4
简洁地说,df <- 创建一个新对象,df[] <- 修改一个已存在的对象。 - hadley
2个回答

12

它调用[<-.data.frame(即[<-的data.frame方法)。这样可以将列表分配给数据框。您也可以执行

df <- as.data.frame(lapply(df, function(x) type.convert(as.character(x))))

示例:

DF <- data.frame(a=1:2, b=3:4)
DF[] <- list(c=10:11, d=12:13)
#    a  b
# 1 10 12
# 2 11 13

但与此相比:

DF <- `[<-.data.frame`(DF, , , list(c=c("a", "b"), d=c("d", "e")))
#   c d
# 1 a d
# 2 b e

VS.这个:

DF <- `[<-.data.frame`(DF, 1:2, 1:2, list(c=c("a", "b"), d=c("d", "e")))
#  a b
#1 a d
#2 b e

还有这个:

DF <- as.data.frame(list(c=10:11, d=12:13))
#    c  d
# 1 10 12
# 2 11 13

这个习惯用法也适用于矩阵,例如 m <- matrix(1,5,5),然后将 m[] <- 5m <- 5 进行比较。 - joran
谢谢您的迅速回复! - CArnold

12

在Roland写的内容中,需要补充的是,使用DF []会保留现有对象DF及其属性,包括它有两个维度和名称为ab的事实。{edit} 啊,他的评论抢先一步。

Rgames> foo<- matrix(1:6,2,3)
Rgames> foo[]<-7:12
Rgames> foo
     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12
Rgames> foo<-7:12
Rgames> foo
[1]  7  8  9 10 11 12

2
+1 是为了说明它“保留了现有对象‘DF’及其属性”。 - CArnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接