这构建了一个简单的数据框,并将一个函数应用于它的两个行。 但是,
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'找不到