在尝试理解Win Vector博客中描述的基础R"Bizarro管道"时,我确认简单的示例在R中产生管状行为而没有安装包.例如:
> 2 ->.; exp(.)
[1] 7.389056
Run Code Online (Sandbox Code Playgroud)
我发现点用作plyr和magrittr中的运算符.我花了几个小时在基地R中找到我能想到的点运算符的同义词,我知道的每一个帮助工具; 我甚至跑了一些荒谬的正则表达式搜索.最后,在绝望中,我尝试了这个:
>. <- 27
>.
[1] 27
Run Code Online (Sandbox Code Playgroud)
到目前为止,我没有确认一个裸露的点,甚至没有"它的名字",在R中是一个有效的变量名.但是我仍然希望这仅仅是一些更明智行为的副作用,记录在案某处.
是吗?如果是这样,在哪里?
我承认,在Win Vector博客中首次出现时,作者认为这是一个笑话.
Hadley Wickham的haven软件包应用于Stata文件,返回一个包含许多"已标记"类型列的元组.你可以用str()看到这些,例如:
$ MSACMSZ :Class 'labelled' atomic [1:8491861] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "metropolitan area size (cmsa/msa)"
.. ..- attr(*, "labels")= Named int [1:7] 0 1 2 3 4 5 6
.. .. ..- attr(*, "names")= chr [1:7] "not identified or nonmetropolitan" "100,000 - 249,999" "250,000 - 499,999" "500,000 - 999,999" ...
Run Code Online (Sandbox Code Playgroud)
如果我可以简单地将所有这些标记的向量提取到因子,那将是很好的,但我已经将标签属性的长度与每个向量中的唯一值的数量进行了比较,并且有时更长,有时更短.所以我认为我需要查看所有这些并决定如何单独处理每一个.
所以我想将labels属性的值提取到列表中.但是,这个功能:
labels93 <- lapply(cps_00093.df, function(x){attr(X, which="labels", exact=TRUE)})
Run Code Online (Sandbox Code Playgroud)
为所有变量返回NULL.
这是一个tibble vs数据帧问题吗?如何从tibble列中将这些属性提取到列表中?
请注意,标签向量已命名,我需要标签和名称.
根据@ Hack-R的请求,这里是我的数据的一小部分,由dput转换(我以前从未使用过).我申请了这段代码:
filter(cps_00093.df, …Run Code Online (Sandbox Code Playgroud) 有没有办法以编程方式判断r中的给定函数是否具有标准评估,如果没有,则函数评估的哪个组件 -
等 - 是非标准的?我理解闭包可能是标准的,原语很可能是非标准的,但两种方式都有例外.我问的是确定函数语义是否是关于这些事物的标准,而不是函数机制是否是标准的.
我认为这些事情应该是通过仔细阅读帮助页面来推导出来的,并且代码失败,并且没有任何引用的源代码.但是,如果我在给定函数的评估中有一种快速识别非标准特征的机械方法,那将会给我带来很大的悲伤.
如果没有办法以编程方式识别函数非标准的所有方式,有没有办法测试 标准的任何 方面?
我正在尝试使用profvis包对R(64位)中的大型作业进行内存分析,在RStudio下运行,在Windows 7下运行.profvis不断崩溃,我收到一条错误消息,指出Pandoc内存不足.邮件复制如下.
我的理解,请纠正我,如果这是错误的,如果我可以在Pandoc上设置/ LARGEADDRESSAWARE开关,问题可能会消失.要做到这一点,我需要安装一个链接器等,在学习如何做所有这些事情之后,做我自己的构建.或者,有一个快捷方式,包括安装MS Visual Studio,运行editbin实用程序,并以此方式设置切换.然而,在我的机器上安装新的Visual Studio并不高兴,并要求我在Windows Management Instrumentation面前解决一些未指明的问题.
所以我的问题是:有没有办法在R内部设置Pandoc上的/ LARGEADDRESSAWARE开关?
我仍然不擅长使用R的标准调试工具,而且我经常发现错误和追溯都没有告诉我足以弄清楚发生了什么.我想在出错时更改R的默认行为以提供更多信息.
具体来说,我总是喜欢call,包括formals,分配给每个形式的表达式(默认表达式,如果默认是指定的表达式),以及每个参数表达式的值在适当的位置评估,所有返回的格式为使得哪个表达式与哪个正式表达式以及哪个值与哪个表达式相匹配使得它明确无误.由于值可能很大或者是意外或渐渐消失的类型,我希望它们以一种格式返回,例如a str(),它可以做出关于截断的明智选择并正确识别承诺和其他倾向于将自己评估为某些东西的对象类型在你看到它们之前别的.
最后,对于调用堆栈中的每个函数,我都喜欢所有这些以及每个函数的return值,call从错误回到(并包括)我编写的一些代码.在我看来,自然结构将是一个单独的R对象,一个list列表,每个列表call(可能整理,broom类似,与一些列表列的tibble),我可以以显而易见的方式单步执行.
如果我描述了一些标准的R调试工具,我还没有学会如何正确使用,我很抱歉.这甚至可能吗?如果是,可以通过R的可用错误处理程序实现,还是需要一些程序包规模的编码项目?
我最希望有一个解决方案来更改对此的默认错误响应,但如果这是不切实际的,我会接受一个解决方案,要求我使用包装器或类似的东西重新运行代码块.
R的大多数帮助页面都是为了提供特定命令的文档而设计的,如果你知道命令并试图找出如何使用它,就可以轻松找到它们.但是有许多帮助页面主要与单个命令无关,而是与影响许多单个命令的编程工具或技术有关,并且页面名称不是任何命令的名称.示例包括"regex"的帮助页面,"连接","内部通用功能"等等.
我担心在我不知道如何找到的这组帮助页面中的某些地方我应该知道这些内容.是否有我可以探索的此类页面的已发布列表?或者有没有办法使用R或R帮助函数来生成这样的列表?
我曾经想过如何在通常的发行版中生成所有R命令的列表 - 如果我没记错的话,大约2000个 - 但我不知道如何找到一个匹配的帮助页面名称列表.
在阅读下面的有用和有趣的答案后,我意识到这是一个比我想象的更难的问题.通过以下方式:
things <- mget(ls("package:base"), inherits = TRUE)
fns <- Filter(is.function, unique(things))
length(fns)
Run Code Online (Sandbox Code Playgroud)
我们了解到基础包中有1169个独特的功能.根据G. Grothendieck的建议,我们了解到有1216个帮助页面与基础包相关联.因此,这些页面中至少有47个是针对特定功能以外的其他内容.但这个数字实际上比这个要大得多,因为有很多帮助页面可以提供有关多个功能的信息,而我并不知道任何在多个页面上有多个偶然处理的功能.因此,将它们放入正确的对应关系需要对每页进行额外的检查.
例如,考虑名为"funprog"的帮助页面.其简短描述是"函数式编程语言中的通用高阶函数".你可以通过搜索它讨论的六个函数之一(Reduce,Filter,Find,Map,Negate,Position)来实现它.在下面Grothendieck建议的帮助页面列表中,此页面不会出现在其页面名称下面,而只会出现在"Reduce"下,而"Reduce"必须代表其他五个功能.但这意味着还有五个页面与特定功能无关,但与其他内容无关.我希望通过一些机械方式将功能与其帮助页面进行匹配,并生成剩余页面的完整列表.它不会那么容易.
此外,根据以下建议进行探讨,使我得到了与基础和推荐包相关的33个小插图,其中我通常不知道.我认为很难在这些插图和与特定命令无关的帮助页面之间画出一条概念线,比如上面描述的funprog帮助页面.
我从事数据清理工作.我有一个函数可以识别大型输入文件中的坏行(根据我的ram大小,一次性读取太大)并将坏行的行号作为向量返回badRows.这个功能似乎有效.
我现在正试图将坏行读入数据帧,到目前为止还没有成功.
我当前的方法是read.table在我的文件的打开连接上使用,使用行数的向量在读取的每一行之间跳过.对于连续的坏行,此数字为零.
我算作skipVec:
(badRowNumbers - c(0, badRowNumbers[1:(length(badRowNumbers-1]))-1
Run Code Online (Sandbox Code Playgroud)
但就目前而言,我只是将我的函数传递给skipVec全零的向量.
如果我的逻辑是正确的,这应该返回所有行.它不是.相反,我得到一个错误:
"read.table中的错误(con,skip = pass,nrow = 1,header = TRUE,sep =""):输入中没有可用的行"
我目前的功能基于Miron Kursa("mbq")的功能,我在这里找到了它.
我的问题有点重复,但我认为他的功能有效,所以我以某种方式打破了它.我仍然试图理解打开文件和打开文件连接之间的区别,我怀疑问题存在于某个地方,或者在我的使用中lapply.
我在RStudio 0.97.551下运行R 3.0.1,在一台老式的Windows XP SP3机器上运行3gig.石器时代,我知道.
以下是产生上述错误消息的代码:
# Make a small small test data frame, write it to a file, and read it back in
# a row at a time.
testThis.DF <- data.frame(nnn=c(2,3,5), fff=c("aa", "bb", "cc"))
testThis.DF
# This function will work only if the …Run Code Online (Sandbox Code Playgroud) 是:
devtools::use_package("tidyverse")
Run Code Online (Sandbox Code Playgroud)
R 中将 tidyverse 包集导入另一个包的规范方法?或者单独导入包会更好吗?我希望使用除 readr 之外的所有当前 tidyverse 软件包的功能。
我希望能够在与省略号(...,AKA 点)匹配的函数的参数中传递命名对象,以便在该函数的执行环境或在该环境中执行的函数中普遍可用无论在哪里定义,就好像参数已经在那里输入一样。
我试图这样做,对于一个函数,一个在该函数外部定义的嵌套函数,一个在该函数内部定义的嵌套函数,使用 list2env(),它应该将其参数列表的元素返回到 parent.frame () 环境,我理解为调用环境。因此:
# Ellipsis in nested functions
inner_f1<- function(x){list2env(list(...)[-1L]); x + b}
outer_f <- function(x, ...){
list2env(list(...)[-1L])
in01 <- x + a
inner_f2 <- function(x){list2env(list(...)[-1L]); print(ls()); x + c}
in02 <- inner_f2(x)
in03 <- inner_f1(x)
out <- list(in01, in02, in03)
}
outer_f(x=0, a=1, b=2, c=3)
Run Code Online (Sandbox Code Playgroud)
我在嵌套函数的定义中有和没有...的情况下尝试过这个,但都不起作用。所需的输出是:
$ in01
[1] 1
$ in02
[1] 2
$ in03
[1] 3
Run Code Online (Sandbox Code Playgroud)
“点”下的 R 帮助文件没有提供有关将 ... 值传递给内部函数的信息,它提到从 ... 中获取信息的唯一方法是通过 ..(n) 方法。它指的是“R 简介”,但 par 示例似乎错误地暗示,内部函数拥有自己的......就足够了,尽管 par 代码(未在那里引用)通过以下方式获取内容对 做复杂的事情args = …
getAnywhere() 是否有任何相当简单、直接的函数,它返回带有任何注释的函数的源代码,这样,如果我没有看到注释,我可以确信没有注释,无论代码是否在 R 中, c、c++、Fortran 还是其他?例如,stats:::plot.acf 中似乎没有任何注释。我是否可以由此得出结论,其案文没有评论?
我知道有一个类似流程图的搜索过程,如果您知道源代码是用 R 编写的,那么可以通过某种适当的搜索方法 tp gethub 从特定的 github 存储库中获取包含注释的源代码。此外,如果您确定代码采用某种指定的其他语言,则可以通过更复杂的搜索过程来使用它,该过程包括查找正确的文件,然后在其中进行文本搜索,这对于基本包和贡献包来说是不同的。我的印象是,至少直到最近,如果您想了解是否存在包含注释的代码版本,则没有捷径可以通过隐式流程图搜索方法来学习和工作。此外,我相信,除了注释本身或先验知识之外,没有任何地方可以识别包含或不包含注释的代码版本。
然而,R 是一个发展相当迅速的生态系统,我认为现在可能存在更简单的工具来确定是否存在包含注释的源版本,并查找它(如果有),这并不是完全没有道理的。他们有吗?