小编Shu*_*huo的帖子

R - 检查函数中是否存在对象

假设我有一组x, y可能定义或未定义的变量.这些变量被传递给一个名为的函数test.

y <- 10
test <- function(a,b) { ifelse(a > b, "hello", "world") }
test(x,y)

# Error in ifelse(a > b, "hello", "world") : object 'x' not found
Run Code Online (Sandbox Code Playgroud)

如果我test(x,y)在x尚未实例化时调用,则R将抛出"对象'x'未找到"错误.

如果我添加了一个存在检查,该函数在从全局环境调用它时会起作用

y <- 10
test <- function(a,b) { 
     print(exists(as.character(substitute(a))))
     if (!exists(as.character(substitute(a)))) {a <- 0}
     ifelse(a > b, "hello", "world")  
}
test(x,y)

# [1] FALSE
# [1] "world"

x <- 11
test(x,y)

[1] TRUE
[1] "hello"
Run Code Online (Sandbox Code Playgroud)

但是,如果我test(x,y)blah函数内部换行.它无法找到现有变量.

rm(list=ls())
test <- function(a,b) …
Run Code Online (Sandbox Code Playgroud)

r error-checking

4
推荐指数
1
解决办法
1075
查看次数

R Programming - 在调用它的环境中创建变量

我有一个函数,他的任务是在父对象中创建一个变量.我想要的是函数在它被调用的级别创建变量.

createVariable <- function(var.name, var.value) {
    assign(var.name,var.value,envir=parent.frame())
    }


# Works
testFunc <- function() {
    createVariable("testVar","test")
    print(testVar)
}

# Doesn't work
testFunc2 <- function() {
    testFunc()
    print(testVar)
}

> testFunc()
[1] "test"
> testFunc2()
[1] "test"
Error in print(testVar) : object 'testVar' not found
Run Code Online (Sandbox Code Playgroud)

我想知道在没有在全局环境范围内创建变量的情况下是否有任何方法可以做到这一点.

编辑:是否还有一种方法可以对已创建变量进行单元测试?

variables environment r environment-variables

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

C中的fscanf没有读完整行?

这非常简单,但我只是遇到了问题.

文本文件有一个标题,

例如,

# Avizo BINARY-LITTLE-ENDIAN 2.1

define Lattice 496 384 470

Parameters {
    AlignTransform {
        slice0000 0 -0 -30 -1,
        slice0001 0 -0 -30 -1,
        slice0002 0 -0 -30 -1,
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用fscanf读取每一行.

   int i;
   for (  i = 0; i < 10; i++ ) {
     fscanf(fp, "%s\n", buf);  
     printf("%d) %s\n",i,buf);
   }
Run Code Online (Sandbox Code Playgroud)

结果如此

0) #
1) Avizo
2) BINARY-LITTLE-ENDIAN
3) 2.1
4) define
5) Lattice
6) 496
7) 384
8) 470
9) Parameters
Run Code Online (Sandbox Code Playgroud)

所以它解析空格而不是换行符.不确定发生了什么.

c newline scanf

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

R用"on"或"off"替换逻辑向量

我正在尝试创建一个衬垫,它将基于true或false替换具有"on"或"off"的逻辑向量.

我能想到的最好的是使用2 gsubs.

假设我有矢量tmp

tmp <- sample(100,100)
Run Code Online (Sandbox Code Playgroud)

我可以用

blah <- tmp > 50
blah <- gsub(FALSE, "no", blah)
blah <- gsub(TRUE, "yes", blah)
Run Code Online (Sandbox Code Playgroud)

实现我想要的,但我敢打赌,这是一个更优雅的解决方案.

replace r vector

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

R - 过滤矩阵基于真/假向量

我有一个可以包含向量和矩阵的数据结构.我想基于一个真正的假列来过滤它.我无法弄清楚如何成功过滤它们.

result <- structure(list(aba = c(1, 2, 3, 4), beta = c("a", "b", "c", "d"), 
chi = structure(c(0.438148361863568, 0.889733991585672, 0.0910745360888541, 
0.0512442977633327, 0.812013201415539, 0.717306115897372, 0.995319503592327, 
0.758843480376527, 0.366544214077294, 0.706843026448041, 0.108310810523108, 
0.225777650484815, 0.831163870869204, 0.274351604515687, 0.323493955424055, 
0.351171918679029), .Dim = c(4L, 4L))), .Names = c("aba", "beta", "chi"))

> result
$aba
[1] 1 2 3 4

$beta
[1] "a" "b" "c" "d"

$chi
           [,1]      [,2]      [,3]      [,4]
[1,] 0.43814836 0.8120132 0.3665442 0.8311639
[2,] 0.88973399 0.7173061 0.7068430 0.2743516
[3,] 0.09107454 0.9953195 0.1083108 0.3234940
[4,] 0.05124430 0.7588435 0.2257777 …
Run Code Online (Sandbox Code Playgroud)

r vector matrix

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