这很简单,但让我对生活感到困惑。
我正在尝试将较大函数中创建的对象(数字变量,数据框等)转换为较大函数中的较小函数。
下面的示例函数的输出应该是一个包含20行的data.frame,但我只得到“test”。有人请在R中解释这个对象函数行为以及如何在函数之间获取创建的对象?提前谢谢!
testfunload <- function(test){
###All my different tries to get test dataframe into testfunload function
txt <- get("test")
try1 <- get(test)
try2 <- get(paste0(txt))
try3 <- get(paste0(test))
try4 <- get(test)
try5 <- test
try6 <- get("test")
print(try1)
print(try2)
print(try3)
print(try4)
print(try5)
print(try6)
}
###Testing with test data.frame in local environment
testfunload2 <- function(){
test <- data.frame(i1=rep("i",20), i2=rep("I",20))
testfunload(test="test")
}
###Testing with test data.frame in local environment
testfunload2global <- function(){
test <<- data.frame(i1=rep("i",20), i2=rep("I",20))
testfunload(test="test")
}
###PROBLEM:Doesn't have data.frame only "test" as char
testfunload2()
[1] "test"
[1] "test"
[1] "test"
[1] "test"
[1] "test"
[1] "test"
###PROBLEM:Doesn't have data.frame only "test" as char
testfunload2global()
[1] "test"
[1] "test"
[1] "test"
[1] "test"
[1] "test"
[1] "test"
期望的输出:
i1 i2
1 i I
2 i I
3 i I
4 i I
5 i I
6 i I
###on for 20 rows etc.
答案 0 :(得分:0)
对我而言,它看起来有点像将变量传递给函数的复杂方法。也许你可以使用...
参数得到你想要的东西?
但是,如果要访问调用范围,可以查看parent.frame()
。它为您提供了调用函数的范围内的环境。
考虑这个功能:
f <- function() {
e <- parent.frame()
with(e, x + y)
}
它评估调用范围中的x + y
- 在某种程度上,你得到了动态而不是词汇范围。
因此,使用这些功能,您将x
和y
传递给f
,而不会明确地这样做。
g <- function(x, y) f()
h <- function(x) {
y <- 2
f()
}
他们将这样工作:
> g(1, 1)
[1] 2
> h(3)
[1] 5
当然,只需制作x
和y
f
参数, 就更简单了。