好的,所以我正在编写一个更大的函数来调用几个函数。
问题是我需要在某些逻辑条件下突破“function_inner”而不突破“function_outer”。Break 似乎适用于循环,然后停止,它停止所有功能......有什么想法吗?
function_outer <- function(){
beta =1
function_inner <- function(beta){
if (beta==1){?break?stop}
print("Its not working")
}
return(beta)
}
Run Code Online (Sandbox Code Playgroud) 作为试点调查的一部分,我向每个Turker展示了四种选择中的各种选择.数据如下所示:
> so
WorkerId pio_1_1 pio_1_2 pio_1_3 pio_1_4 pio_2_1 pio_2_2 pio_2_3 pio_2_4
1 1 Yes No No No No No Yes No
2 2 No Yes No No Yes No Yes No
3 3 Yes Yes No No Yes No Yes No
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
WorkerId set pio1 pio2 pio3 pio4
1 1 Yes No No No
1 2 No No Yes No
...
Run Code Online (Sandbox Code Playgroud)
我可以通过一些方法来解决这个问题,其中没有一个看起来非常优雅:
但在我看来,所有这些都忽略了这样一种观点,即你所谓的"双宽"格式的数据有其自己的结构.我很乐意使用reshape2包,但是尽管使用cast()生成了数据,但我没有看到任何可以帮助我真正融化这个data.frame的选项.
建议欢迎.
so <- structure(list(WorkerId = 1:3, pio_1_1 = structure(c(2L, 1L,
2L), .Label = …Run Code Online (Sandbox Code Playgroud) AWS命令行工具似乎在Linux(Ubuntu PP)和Windows(7)上都被破坏了.在这两种情况下,在正确设置登录凭据并尝试运行最基本的工具(getBalance.sh)之后,我都无法进行身份验证.
An error occurred while fetching your balance: This request must be made over a secure channel. You must use 'https' rather than 'http'.
Run Code Online (Sandbox Code Playgroud)
看起来很简单,但手册和安装目录中没有任何内容表明这是命令行工具支持的选项.
有人已经修改了shell脚本以使用安全连接吗?如果没有,有关我应该从哪里开始修改的线索?
我创建了以下函数/示例作为在表中显示变量标签的通用方法,依此类推:
#' Function to prettify the output of another function using a `var.labels` attribute
#' This is particularly useful in combination with read.dta et al.
#' @param dat A data.frame with attr `var.labels` giving descriptions of variables
#' @param expr An expression to evaluate with pretty var.labels
#' @return The result of the expression, with variable names replaced with their labels
#' @examples
#' testDF <- data.frame( a=seq(10),b=runif(10),c=rnorm(10) )
#' attr(testDF,"var.labels") <- c("Identifier","Important Data","Lies, Damn Lies, Statistics")
#' prettify( testDF, …Run Code Online (Sandbox Code Playgroud) 我需要为my_function(i,x)创建其他名称(其中i可以是1到25之间的整数).我希望它像这样工作
实现这一目标的一种方法是:
my_function1 <- function (x) my_function(1, x)
my_function2 <- function (x) my_function(2, x)
my_function3 <- function (x) my_function(3, x)
...
Run Code Online (Sandbox Code Playgroud)
但是因为它们中有25个,所以在循环中制作它是合理的.为此,我尝试过:
for(i in 1:25){
assign(paste("my_function",i,sep=""),function(x) my_function(i,x))
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为i通过引用传递,最后结果是
我怎样才能通过值传递"i"?或许还有其他方式......
我为什么要这样做?我在效率方面改进了其他R包,但同时我需要它与旧版本兼容.
上一个答案中的可重现示例:
Models <- list( lm(runif(10)~rnorm(10)),lm(runif(10)~rnorm(10)),lm(runif(10)~rnorm(10)) )
lm1 <- lm(runif(10)~rnorm(10))
library(functional)
# This works
do.call( Curry(anova, object=lm1), Models )
# But so does this
do.call( anova, Models )
Run Code Online (Sandbox Code Playgroud)
问题是为什么do.call(anova, Models)工作正常,正如@Roland 指出的那样?
方差分析的签名是 anova(object, ...)
anova调用UseMethod, which should* call anova.lmwhich should call anova.lmlist,其第一行是objects <- list(object, ...),但object在该公式中不存在。
我唯一可以猜测的是,这do.call可能不仅填写省略号,而且填写所有没有默认值的参数,并为省略号留下任何额外的内容?如果是这样,记录在哪里,因为它对我来说绝对是新的!
* 这本身就是一个线索——如果第一个参数未指定,如何UseMethod知道调用anova.lm?没有anova.list方法anova.default或类似...
我最近收到此错误消息:
> load_all(file.path(.db,"R-projects","taRifx.geo"))
Loading taRifx.geo
Error in eval(expr, envir, enclos) : could not find function "Polygons"
Run Code Online (Sandbox Code Playgroud)
该文件夹是我的本地副本:https : //github.com/gsk3/taRifx.geo
Polygons是 的一部分sp,并sp已加载:
> Polygons
function (srl, ID)
{
stopifnot(is.list(srl))
stopifnot(length(srl) > 0)
if (any(sapply(srl, function(x) !is(x, "Polygon"))))
stop("srl not a list of Polygon objects")
if (missing(ID))
stop("Single ID required")
if (length(ID) != 1)
stop("Single ID required")
ID <- as.character(ID)
stopifnot(nchar(ID) > 0)
res <- .Call(Polygons_c, srl, ID)
res
}
<environment: namespace:sp>
Run Code Online (Sandbox Code Playgroud)
sp也在包的Depends部分中 …
我有一个大的data.table,我正在崩溃到月级使用,by.
有5个vars,有#个级别:c(4,3,106,3,1380).106是月,1380是地理单位.事实证明有一些0,因为有些单元格没有值. by放下这些,但我希望能保留它们.
可重复的例子:
require(data.table)
set.seed(1)
n <- 1000
s <- function(n,l=5) sample(letters[seq(l)],n,replace=TRUE)
dat <- data.table( x=runif(n), g1=s(n), g2=s(n), g3=s(n,25) )
datCollapsed <- dat[ , list(nv=.N), by=list(g1,g2,g3) ]
datCollapsed[ , prod(dim(table(g1,g2,g3))) ] # how many there should be: 5*5*25=625
nrow(datCollapsed) # how many there are
Run Code Online (Sandbox Code Playgroud)
是否有一种有效的方法用0来填充这些缺失值,以便所有by变量的排列都在最终的折叠data.table中?
我在整理包装时遇到了麻烦.这是几个月前的最后一次工作,我从未检查过,所以不确定我添加的代码片段是否破坏了它,如果我的系统配置发生了变化,或者roxygen2发生了变化.
我已经尝试通过它从上面的目录devtools::document中的--vanillaR sesssion roxygen2::roxygenize('taRifx')从roxygenize('.')项目基目录调用它,尝试以root身份运行,以防它是权限的事情,等等.
这是RStudio版本:
==> roxygenize('.', roclets=c('rd'))
* checking for changes ... ERROR
Error in file(con, "r") : cannot open the connection
Run Code Online (Sandbox Code Playgroud)
包裹代码在这里:
https://github.com/gsk3/taRifx
我该如何解决?
Perl有一个可爱的修饰符/x,它忽略了正则表达式中的空格.也就是说,不管空格如何都匹配,而是除非转义,否则它会在正则表达式的解释中省略空格.
即^x[0-7][x-z][ABCpuq*]*$可以等效地编写,但^x [0-7] [x-z] [ABCpuq*]*$在/x模式中可读得更多.
grepR中的它似乎没有这样的模式,但考虑到它们的Perl兼容性,是否可以选择通过?我尝试了几个选项,但没有这样的运气.
> grepl( "^x[0-7][x-z][ABCpuq*]*$", "x5yuuA" )
[1] TRUE
> grepl( "^x [0-7] [x-z][ABCpuq*]*$", "x5yuuA" )
[1] FALSE
> grepl( "^x [0-7] [x-z][ABCpuq*]*$", "x5yuuA", perl=TRUE )
[1] FALSE
> grepl( "^x [0-7] [x-z][ABCpuq*]*$/x", "x5yuuA", perl=TRUE )
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
次要问题:R的Perl风格的正则表达式如何直接依赖于C PCRE库?似乎有一个PCRE_Extended设置位打开忽略空格.