看看这段代码。我正在尝试制作以只有 ID 的空数据框开头并动态添加数据的代码。例如,假设它以
ID
1 1
2 2
3 3
然后我打电话
addPair(1,"a",4); #sets the value of column "a" at row 1 to be the value 4
它会变成
ID a
1 1 4
2 2 NA
3 3 NA
看看下面的这段代码。所需的最终total
变量是:
ID a
1 1 4
2 2 NA
3 3 NA
但最后,total
只是
ID
1 1
2 2
3 3
这是代码。为什么total
不保留它添加的内容?在方法结束时,total 是正确的,但是在方法之后,total 又回到了IDs
. 这是代码,下面是输出。
# rm(list=ls()) # that code _should_ always be commented out
#get all the IDs
IDs = c("1","2","3")
N = length(IDs)
#the big data frame
total <- data.frame("ID"=IDs)
addPair = function(i,name,val) {
total[,toString(name)] = rep(NA,N)
total[,toString(name)][i] = val
print("end")
print(total)
}
addPair(1,"a",4)
print("after call")
print(total)
这是输出:
[1] "end"
ID a
1 1 4
2 2 NA
3 3 NA
> print("after call")
[1] "after call"
> print(total)
ID
1 1
2 2
3 3
为什么方法结束后会total
丢失该列?a