让这个例子解释一下(只是一个玩具示例来演示我在一段复杂的代码中遇到的问题)。在以下示例中,为什么在a
之后不会更改data.frame sapply
?
> a=data.frame(A=c(1,2,3),B=c(4,5,6))
> a
A B
1 1 4
2 2 5
3 3 6
> a[c(T,T,F),]
A B
1 1 4
2 2 5
> sapply(c(1,2), function(x) a=a[c(T,T,F),])
[,1] [,2]
A Numeric,2 Numeric,2
B Numeric,2 Numeric,2
> a
A B
1 1 4
2 2 5
3 3 6
第二个想法,这可能是因为名称空间。更改的a
仅存在于函数内部。我的问题是如何使这个全球化?
答案 0 :(得分:3)
这是一个更简单的例子:
f <- function() a <- 1
a <- 2
f()
a # a is still 2
发生的事情是:
f
和变量a
。f
没有参数运行。f
内,创建了一个新变量a
,其值为1. a
与全局环境中的a
无关。f
完成运行并返回结果1并销毁创建的a
在功能。a
并且它已保持不变,因此显示为2。如果我们在函数中分配变量名,则R会在具有该名称的函数中创建一个新对象。它不会在函数外部更改同名变量,而是现在存在两个具有相同名称的变量,直到函数完成运行,然后在函数中创建的变量被销毁。