假设我有一组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) 我有一个函数,他的任务是在父对象中创建一个变量.我想要的是函数在它被调用的级别创建变量.
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)
我想知道在没有在全局环境范围内创建变量的情况下是否有任何方法可以做到这一点.
编辑:是否还有一种方法可以对已创建变量进行单元测试?
这非常简单,但我只是遇到了问题.
文本文件有一个标题,
例如,
# 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)
所以它解析空格而不是换行符.不确定发生了什么.
我正在尝试创建一个衬垫,它将基于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)
实现我想要的,但我敢打赌,这是一个更优雅的解决方案.
我有一个可以包含向量和矩阵的数据结构.我想基于一个真正的假列来过滤它.我无法弄清楚如何成功过滤它们.
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)