R make.names在将列表转换为字符向量后返回意外结果

R make.names在将列表转换为字符向量后返回意外结果,r,R,我试图从字符串列表中创建一个字符向量。我的最终目标是将其传递给make.names(),以便为数据帧创建列名 temp<-data.frame(col1=c("use this row as name"),col2=c("use this row as name 2")) make.names(temp[1,]) #fails make.names(c("hi","xxx!@#$")) #works as expected typeof(temp[1,]) typeof(c("hi","x

我试图从字符串列表中创建一个字符向量。我的最终目标是将其传递给
make.names()
,以便为数据帧创建列名

temp<-data.frame(col1=c("use this row as name"),col2=c("use this row as name 2"))
make.names(temp[1,]) #fails
make.names(c("hi","xxx!@#$")) #works as expected
typeof(temp[1,])
typeof(c("hi","xxx!@#$"))

typeof(as.character(temp[1,]))
make.names(as.character(temp[1,]))

以某种形式。只要列名是半可理解的,间距和其他格式就不重要。

您可以只
取消列出数据框:

make.names(unlist(temp))
[1] "use.this.row.as.name"   "use.this.row.as.name.2"

请记住,您的一些尝试失败了,因为
temp
实际上是两列因素,再加上在列表上调用
as.character
时的一些稍微不直观的行为。(请参见
?as.character
)。

您可以
取消列出您的数据框:

make.names(unlist(temp))
[1] "use.this.row.as.name"   "use.this.row.as.name.2"

请记住,您的一些尝试失败了,因为
temp
实际上是两列因素,再加上在列表上调用
as.character
时的一些稍微不直观的行为。(请参见
?as.character
)。

这非常有效,我在读取csv时必须添加
stringsAsFactors=FALSE
,并使用unlist命令
make.names(unlist(temp[1,])
这非常有效,我在读取csv时必须添加
stringsAsFactors=FALSE
,并使用unlist命令
make.names(unlist(临时工[1,])
make.names(unlist(temp))
[1] "use.this.row.as.name"   "use.this.row.as.name.2"