加载他人的.rdata文件,无法访问数据。

9

我的教授给我发了一个.rdata文件,希望我对其中的内容进行分析。虽然我对R语言还算熟练,但我从未将我的工作保存在.rdata文件中,因此也从未使用过它们。

当我尝试加载该文件时,看起来它正在工作:

> load('/home/swansone/Desktop/anes.rdata')
> ls()
[1] "25383-0001-Data"

但是我似乎无法获取数据:

> names("25383-0001-Data")
NULL

我知道.rdata文件中有数据(大小为13MB,里面肯定有很多数据)。我是不是做错了什么?我很困惑。

编辑:

我应该注意到,我也尝试过不使用引号:

> names(25383-0001-Data)
Error: object "Data" not found

重命名:

> ls()[1] <- 'nes'
Error in ls()[1] <- "nes" : invalid (NULL) left side of assignment

我已经尝试过不加引号,参见编辑。 - Wilduck
2
你也可以使用get函数:aReasonableName <- get("25383-0001-Data")。 - Ian Fellows
2个回答

16

如果使用一个不以字母或 . 和字母开头的对象,你会遇到很多问题(在R入门中提到)。

使用反引号来访问此对象(help("`")中的“名称和标识符”部分解释了为什么这样可以),并将该对象分配给一个新的、语法上有效命名的对象。

Data <- `25383-0001-Data`

好吧,我从未像那样命名变量,因为我已经阅读了介绍。不幸的是,这不是我的数据,而且《R语言简介》也没有提到使用反引号。感谢您的回复。 - Wilduck
3
@Wilduck: 我并不是想表达你起的那个变量名,我提供手册链接只是作为参考,而非在暗示你没有阅读过它。谢谢。 - Joshua Ulrich
1
没有什么坏感觉,实际上我很感激您的回复。我认为我发表那条评论的原因和您包含链接的原因是一样的。为了其他偶然读到这个页面的人们 :)。 - Wilduck

5
也许与名称中不寻常的破折号使用有关,并且反引号可以工作:
names(`25383-0001-Data`)

编辑:

更多参考资料(因为Joshua已经完美回答了主要问题),你还可以使用get()重新分配ls()中的对象(Wilduck在问题中尝试过)。如果名称包含非常奇怪的字符,则可能会有用:

foo <- 1:5
bar <- get(ls()[1])
bar
[1] 1 2 3 4 5

当然,这需要在ls() foo 的索引为[1],但查找所需对象的索引并不太难。

不仅仅是破折号的问题。变量名应该以字母或 . 和 字母开头,只能包含字母、._ - Joshua Ulrich
啊,当然。回头看,如果没有使用反引号,它为什么不能工作其实是非常合乎逻辑的。有趣的是,如果你一心认为它是一个对象名称,你可以将“-”符号读成字符中的破折号而不是减号。 - Sacha Epskamp

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