R `names(df[1])<;-`和`姓名(df)[1]<;-`
考虑以下几点:R `names(df[1])<;-`和`姓名(df)[1]<;-`,r,dataframe,R,Dataframe,考虑以下几点: df <- data.frame(a = 1, b = 2, c = 3) names(df[1]) <- "d" ## First method ## a b c ##1 1 2 3 names(df)[1] <- "d" ## Second method ## d b c ##1 1 2 3 我认为正在发生的是,数据帧的替换忽略了从中绘制的数据帧的属性。我不是100%肯定这一点,但以下实验似乎支持这一点: df <- data.frame(a
df <- data.frame(a = 1, b = 2, c = 3)
names(df[1]) <- "d" ## First method
## a b c
##1 1 2 3
names(df)[1] <- "d" ## Second method
## d b c
##1 1 2 3
我认为正在发生的是,数据帧的替换忽略了从中绘制的数据帧的属性。我不是100%肯定这一点,但以下实验似乎支持这一点:
df <- data.frame(a = 1:3, b = 5:7)
# a b
# 1 1 5
# 2 2 6
# 3 3 7
df2 <- data.frame(c = 10:12)
# c
# 1 10
# 2 11
# 3 12
df[1] <- df2[1] # in this case `df[1] <- df2` is equivalent
注意
df
的值是如何更改的,而不是名称。基本上是“替换操作符<代码>”我喜欢约书亚的答案:他说这是魔法。约书亚的答案是指第二个例子,而不是一个没有做任何事情的人……OHBOYOBOYBOY,你是不是在享受一个享受:读这本(著名的专著)——戴维达伦堡——为了将来读者的利益,你能考虑改变你的吗?从gagolews的答案到BrodieG的答案,“接受”(正如你从下面的评论中看到的,gagolews甚至试图删除他自己的答案,这不是最佳答案。如果他不接受这个答案,那就更好了,但你可以改为接受。)
df <- data.frame(a = 1:3, b = 5:7)
# a b
# 1 1 5
# 2 2 6
# 3 3 7
df2 <- data.frame(c = 10:12)
# c
# 1 10
# 2 11
# 3 12
df[1] <- df2[1] # in this case `df[1] <- df2` is equivalent
# a b
# 1 10 5
# 2 11 6
# 3 12 7
names(df[2]) <- "x"
tmp <- df[2]
# b
# 1 5
# 2 6
# 3 7
names(tmp) <- "x"
# x
# 1 5
# 2 6
# 3 7
df[2] <- tmp # `tmp` has "x" for names, but it is ignored!
# a b
# 1 10 5
# 2 11 6
# 3 12 7
names(df)[2] <- "x"
tmp <- names(df)
# [1] "a" "b"
tmp[2] <- "x"
# [1] "a" "x"
names(df) <- tmp
# a x
# 1 10 5
# 2 11 6
# 3 12 7
df[2] <- 2
df <- `[<-`(
df, 2,
value=`names<-`( # `names<-` here returns a re-named one column data frame
`[`(df, 2),
value="x"
) )
df <- `names<-`(
df,
`[<-`(
names(df), 2, "x"
) )
right <- wrong <- c(a=1, b=2)
names(wrong[1]) <- 'changed'
wrong
# a b
# 1 2
names(right)[1] <- 'changed'
right
# changed b
# 1 2