在R中,我有一个元素x
和一个向量v
.我想找到一个元素的第一个索引v
,它等于x
.我知道这样做的一种方法是:which(x == v)[[1]]
,但这似乎效率过低.有更直接的方法吗?
对于奖励积分,是否有一个功能,如果x
是一个矢量?也就是说,它应该返回一个索引向量,指示x
in 的每个元素的位置v
.
根据一般要求,社区维基在R中生成乳胶表.在这篇文章中,我将概述最常用的包和博客,其中包含用于从不太直接的对象生成乳胶表的代码.请随意添加我错过的任何内容,和/或提供有关如何使用R生成格式良好的乳胶桌的提示,提示和小技巧.
latex()
,用于创建包含所选对象的tex文件.它非常灵活,也可以输出longtable
乳胶表.帮助文件中有很多信息?latex
这是一个FAQ问题,所以请尽可能完整.答案是社区答案,如果您认为缺少某些内容,请随时编辑.
我正在使用R并尝试some.function
但我收到以下错误消息:
Error: could not find function "some.function"
Run Code Online (Sandbox Code Playgroud)
这个问题经常出现.当你在R中遇到这种类型的错误时,你怎么解决它?
"谷歌"非常有用......除非你的语言被称为"R",在这种情况下它会吐出大量无关紧要的东西.
任何人都有"R"的搜索引擎技巧?有一些专门的网站,如下面的那些,但你怎么能告诉谷歌你的意思是"R"的语言?如果我正在寻找特定的东西,我将使用特定于R的术语,如"cbind".还有其他这样的伎俩吗?
有谁知道R中的插槽是什么?
我没有找到其含义的解释.我得到一个递归定义:"Slot函数返回或设置有关对象的各个槽的信息"
感谢帮助,谢谢 - 胡同
假设您要将矩阵转换为列表,其中列表的每个元素都包含一列.list()
或者as.list()
显然不起作用,直到现在我使用hack使用以下行为tapply
:
x <- matrix(1:10,ncol=2)
tapply(x,rep(1:ncol(x),each=nrow(x)),function(i)i)
Run Code Online (Sandbox Code Playgroud)
我对此并不完全满意.谁知道我忽略了一种更清洁的方法?
(为了使列表填充行,代码显然可以更改为:
tapply(x,rep(1:nrow(x),ncol(x)),function(i)i)
Run Code Online (Sandbox Code Playgroud)
)
通常当我创建自己的绘图函数时,我会构造一个构造:
op <- par("mypar"=myvalue)
on.exit(par(op))
Run Code Online (Sandbox Code Playgroud)
这是恢复par
到以前值的标准方法.想象一下,你已经运行了一些确实改变了部分语句的函数,你需要在R启动时重置为默认值.这样做的方便方法是什么?
或者换句话说:如何达到默认值par()
?
我在专业环境中定期在R中编程,我也为客户或同事编写包.这里的一些程序员具有Java背景,并坚持使用S4方法以面向对象的方式做所有事情.另一方面,我的经验是,在尝试让代码按照您希望的方式执行操作时,S4实现通常会更糟,并且会导致更多的麻烦.
我绝对同意,在某些情况下,您必须能够以受控方式构造复杂对象或附加现有对象.但大多数时候,S4实现也可以使用经典列表轻松完成,没有像定义standardGeneric,方法,构造函数,初始化器等那样麻烦.
你什么时候考虑为R编写S4实现?
编辑:为了清楚起见,我非常感谢R.OOP中的答案和关于OO的讨论可以在R中以多种方式完成,但我的问题实际上是针对特定使用S4方法的附加值.
由于我经常遇到需要S4编程来保持概述的情况,我收集了很多关于S4对象,方法和编程的资料.我在这里列出了它们作为参考.请添加您自己的来源.
在网上
methods
帮助文件:从包装方法中,很多必要的信息都可以找到帮助文件图书
PS:如果有人找到社区复选框,您可以将其设为社区拥有的帖子.不知何故,我再也无法在编辑窗口中找到它......
最近关于使用require与::的问题引发了关于在R中编程时使用哪种编程风格的问题,以及它们的优点/缺点.浏览源代码或在网上浏览,您会看到许多不同的样式显示.
我的代码中的主要趋势:
重度矢量化我使用索引(和嵌套索引)玩了很多,这有时会产生相当模糊的代码,但通常比其他解决方案快得多.例如:x[x < 5] <- 0
而不是x <- ifelse(x < 5, x, 0)
我倾向于嵌套函数以避免使用我需要清理的临时对象来重载内存.特别是对于操纵大型数据集的函数,这可能是一个真正的负担.例如:y <- cbind(x,as.numeric(factor(x)))
而不是y <- as.numeric(factor(x)) ; z <- cbind(x,y)
我编写了很多自定义函数,即使我只在例如一次使用代码.一个sapply
.我相信它可以让它更容易阅读,而不会产生可以保持躺着的物体.
我不惜一切代价避免循环,因为我认为矢量化更清洁(更快)
然而,我注意到对此的看法不同,有些人倾向于背弃他们所谓的"Perl"编程方式(甚至是"Lisp",所有这些括号都在我的代码中飞来飞去.我不知道虽然走得那么远.
您认为R中的良好编码实践是什么?
您的编程风格是什么,您如何看待它的优缺点?