无法复制“R for Beginners”示例

时间:2016-04-04 04:12:41

标签: r

我已经四处寻找,但无法想象这个人。我是R的总菜鸟,我从头开始学习“R for Beginners

勉强进入它,pg。 6,我无法复制他们的样本。在试图解释“max.level”时,他们会显示......

> name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5
> M <- data.frame(n1, n2, m)

> ls.str(pat = "M")
M : ‘data.frame’: 1 obs. of 3 variables:
$ n1: num 10
$ n2: num 100
$ m : num 0.5

> ls.str(pat="M", max.level=-1)
M : ‘data.frame’: 1 obs. of 3 variables:

但在R中我得到......

> name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5
> M <- data.frame(n1, n2, m)

> ls.str(pat = "M")
M : 'data.frame':       1 obs. of  3 variables:
 $ n1: num 10
 $ n2: num 100
 $ m : num 0.5

> ls.str(pat="M", max.level=-1)
Error in ls.str(pat = "M", max.level = -1) : 
  unused argument (max.level = -1)

我不知道我做错了什么或如何解决它。指南中有拼写错误吗?是否有一些我没有正确加载的库?

非常感谢!

2 个答案:

答案 0 :(得分:5)

不足为奇。你使用的参考是在2005年.R已经改变了(很多!!!)。函数max.level不再存在参数ls.str。我建议你去?ls.str赶上更新。

如果您需要示例,请查看该帮助页面的底部。

你真的应该在https://cran.r-project.org/使用最新的R文档。这是最新的。 “R的介绍”对初学者来说非常好,中等长度。玩得开心!

<强>更新

检查函数具有哪些参数的快速方法是使用函数args。例如,args(ls.str)

来自R的错误消息非常有用。所以每当你看到“未使用的参数”时,你应该检查你是否正确传递了参数。

我相信在2005年,R仍然是R-2版本。**。因为当我在2011年拿到R时,它仍然是R-2.14。*​​。但现在R在R-3。**。从版本2 **到版本3 **,R内核发生了很大的变化。

答案 1 :(得分:0)

<块引用>

几乎没有,pg。 6、我无法复制他们的样本。在试图解释“max.level”时,他们显示...

嗯。现在是 2021 年 1 月,就像你曾经的菜鸟一样,我在“R 初学者”示例中遇到了同样的问题。但是,我做了“正确的事”并查阅了关于 CRAN-R.project.org 的官方 R 文档。这是来自current (at the time) reference manual (2020-1010)的截图。

Arguments
...
max.level     maximal level of nesting which is applied for displaying nested structures, e.g.,
              a list containing sub lists. Default 1: Display only the first nested level.
...

啊!但是不要被它愚弄了。虽然它被列为一个论点,但它不是论点ls.str(...)。您必须查看使用部分。它不会将 max.level 显示为 ls.str()lsf.str()参数,但会为 print() 显示它。

我对参数使用粗体,因为如果我阅读“2005 R for Beginners”,作者会明确区分参数选项 并将 max.level 称为 选项(第 3 页,第 2.1 节,“R 的工作原理”)。抱歉,我还不知道这个区别是否重要。

我的回答重点是。如果您是 R 新手,“R for Beginners”是(目前)推荐的入门读物,但不要指望准确性,它(显然)没有得到维护。相反,找到“参考”手册并阅读函数的完整概要(例如 ls.str())。习惯文档的语义。

(奖金)

如果您是一名熟悉其他语言的程序员,那么 R 参考手册可能与您预期的略有不同。 (就像我一样,为什么他们将 print() 放在 ls.str() 下而不只是引用 print() 部分?那样 max.level 就不会在 ls.str() 下是不是因为 print() 对象的 ls_str 语义很特殊?那么为什么不链接到 ls_str 对象并讨论那里的特殊性?)。随着您了解的更多,习惯这些差异。