相关疑难解决方法(0)

R中的异常处理

有没有人在R中有异常处理的示例/教程?官方文档非常简洁.

exception-handling r

98
推荐指数
5
解决办法
7万
查看次数

使用tryCatch跳转到错误时循环的下一个值?

我已经阅读了一些关于tryCatch和cuzzins的其他SO问题,以及文档:

但我还是不明白.

我正在运行一个循环,next如果发生任何一种错误,我想跳过:

for (i in 1:39487) {

  # EXCEPTION HANDLING
  this.could.go.wrong <- tryCatch(
                           attemptsomething(),
                           error=function(e) next
                         )
  so.could.this <- tryCatch(
                     doesthisfail(),
                     error=function(e) next
                   )

  catch.all.errors <- function() { this.could.go.wrong; so.could.this; }
  catch.all.errors;


  #REAL WORK
  useful(i); fun(i); good(i);

  }  #end for
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,没有next我能找到的文件)

当我跑步时,R鸣喇叭:

Error in value[[3L]](cond) : no loop for break/next, jumping to top level
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么基本点?这tryCatch显然是在for循环中,所以为什么不R知道呢?

error-handling exception-handling r try-catch

57
推荐指数
5
解决办法
8万
查看次数

可以lapply不修改更高范围内的变量

我经常想做以下几点:

mat <- matrix(0,nrow=10,ncol=1)
lapply(1:10, function(i) { mat[i,] <- rnorm(1,mean=i)})
Run Code Online (Sandbox Code Playgroud)

但是,我希望mat里面会有10个随机数,但它有0个.(我并不担心rnorm部分.显然有一种正确的方法可以做到这一点.我担心会影响mat lapply的匿名函数)我可以不从lapply里面影响矩阵垫吗?为什么不?是否有R的范围规则阻止了这个?

r function lapply

15
推荐指数
2
解决办法
5837
查看次数

通过行列索引替换数据框中的值时,如何避免循环?

我希望能够通过按行和列索引来替换数据框中的值,给定行索引,列名和值的列表.

library(tidyverse)
cols <- sample(letters[1:10], 5)
vals <- sample.int(5)
rows <- sample.int(5)
df <- matrix(rep(0L, times = 50), ncol = 10) %>%
  `colnames<-`(letters[1:10]) %>%
  as_tibble
Run Code Online (Sandbox Code Playgroud)

我可以通过参数列表上的for循环执行此操作:

items <- list(cols, vals, rows) %>%
  pmap(~ list(..3, ..1, ..2))

for (i in items){
  df[i[[1]], i[[2]]] <- i[[3]]
}
df
#> # A tibble: 5 x 10
#>       a     b     c     d     e     f     g     h     i     j
#>   <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1     0     0     0 …
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
2
解决办法
80
查看次数

使用功能和环境

这里在最近的讨论(如1,2)我现在用在我的一些代码的环境.我的问题是,如何根据参数创建修改环境的函数?例如:

y <- new.env()
with(y, x <- 1)
f <- function(env,z) {
    with(env, x+z)
}
f(y,z=1)
Run Code Online (Sandbox Code Playgroud)

Error in eval(expr, envir, enclos) : object 'z' not found
Run Code Online (Sandbox Code Playgroud)

我正在使用环境来同时保持两组模拟(没有重构我的代码,我为一组实验编写了代码).

scope r

3
推荐指数
1
解决办法
3730
查看次数

< - 和<<之间的区别 -

情况1:

rm(list = ls())
foo <- function(x = 6){
  set <- function(){
  x <- x*x}
  set()
x}
foo()
# [1] 6
Run Code Online (Sandbox Code Playgroud)

案例2:

rm(list = ls())
foo <- function(x = 6){
set <- function(){
  x <<- x*x}
  set()
  x}
foo()
# [1] 36
Run Code Online (Sandbox Code Playgroud)

我读到该<<-运算符可用于为与当前环境不同的环境中的对象赋值.它表示<<-可以对不在当前环境中的对象进行对象初始化.我想问一下可以使用哪个环境的对象进行初始化<<-.在我的情况下环境是foo功能环境,可以<<-初始化函数外部的对象或当前环境中的对象吗?完全混淆何时使用<-以及何时使用<<-.

r lexical-scope

3
推荐指数
1
解决办法
376
查看次数

如何在R中的全局环境中编写函数的结果

我有这些数据集:A <- 4, B <- 3, C <- 2.

所以我把它们放在一个列表中 D<-list(A,B,C)并想要应用这个函数:

s<-function(x) {
    t<-8
    x<-as.data.frame(x*t)
}

lapply(D,s)
Run Code Online (Sandbox Code Playgroud)

当我应用该lapply功能时,它只是打印它们.

如何将结果保存在全局环境中而不是打印它们?

因此,结果应为A值32 B,值为24 C,值为16.

global r save lapply

2
推荐指数
1
解决办法
2422
查看次数

<< - 在R中意味着什么?

可能重复:
你如何在R中使用"<< - "(作用域分配)?

我正在读一个伪代码.我<<-多次遇到这个问题.有什么意义<<-?这是什么意思?在使用<<-运营商时我们需要考虑或注意什么?

r

-2
推荐指数
1
解决办法
4023
查看次数