为什么这个R函数不起作用或抛出错误? (范围问题?)

时间:2016-12-10 06:43:36

标签: r scope

这构建了一个简单的数据框,并将一个函数应用于它的两个行。 但是,

name2num[[name]] = uid 

填写name2num,而

num2name[uid] = name 

不会填写num2name

numbers = c(1,2)
names = c('a', 'b')
df = data.frame(numbers, names)
name2num = new.env()
num2name = integer(nrow(df))
f = function(row) {
    uid = as.integer(row[1])
    name = row[2]
    name2num[[name]] = uid
    num2name[uid] = name
}

这些是我的测试:

  

申请(df,1,f)
  [1]" a" " B"
  name2num [['一个']]
  [1] 1
  name2num [[' B']]
  [1] 2
  num2name
  [1] 0 0

如果函数中的num2name是局部变量,我可以理解这一点,但如果是,我应该得到一个未找到的对象'错误信息。

我知道写一个函数来传回结果会更好,但是我想知道R在做什么,为什么它既没有抛出错误,也没有写入num2name。为什么它不写入全局变量,或者抛出一个未找到的对象错误,就像我使用未在调用环境中定义的变量的名称一样?

f = function(row) {
    uid = as.integer(row[1])
    name = row[2]
    name2num[[name]] = uid
    foo[uid] = name
}
  

申请(df,1,f)
      foo [uid] = name:object' foo'找不到

0 个答案:

没有答案