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