使用函数重命名字符变量
Using functions to rename a character variable
我有一个数据框,其中第一列是代表一个国家地区的字符变量,其他列包含一些数字数据。我想在第一列的名称中添加一个后缀,以指示各区所属的区域。假设前两个 "NR",第三个到第五个 "BB"(这些行可以与其他地区继续)
D=data.frame("Col1" = c("Levice", "Nitra", "Brezno", "Detva", "Zvolen"),
"Col2" = 1:5, stringsAsFactors=F)
我想我可以用代码来做到这一点:
D$Col1[1:2]=paste(D$Col1[1:2],"NR", sep=".")
D$Col1[3:5]=paste(D$Col1[3:5],"BB", sep=".")
所以我明白了:
Col1 Col2
Levice.NR 1
Nitra.NR 2
Brezno.BB 3
Detva.BB 4
Zvolen.BB 5
但是,如果我尝试将代码放入函数中,结果不会存储在我的数据框中:
Suffix=function(X1){
D1=(X1=D$Col1[1:2])
paste(D$Col1[1:2],"NR", sep=".")
}
Suffix(D)
"Levice.NR" "Nitra.NR"
或者如果我修改它,不起作用:
Suffix=function(X1){
D1=(X1=D$Col1[1:2])
D$Col1[1:2]=paste(D$Col1[1:2],"NR", sep=".")
}
Suffix(D)
#just nothing happens to the data frame
你能帮忙看看函数有什么问题吗?
R 中的函数不应修改自身以外的值。事实上,函数不应该有 "side-effects" 是函数编程的核心原则(R 是一种函数编程语言)。当您尝试从函数范围外修改变量时,该函数会对只能在函数内部访问的副本进行更改。
正确的做法是return修改对象并在函数外进行重新赋值
Suffix <- function(X) {
X$Col1[1:2] <- paste(X$Col1[1:2],"NR", sep=".")
return(X)
}
D <- Suffix(D)
我有一个数据框,其中第一列是代表一个国家地区的字符变量,其他列包含一些数字数据。我想在第一列的名称中添加一个后缀,以指示各区所属的区域。假设前两个 "NR",第三个到第五个 "BB"(这些行可以与其他地区继续)
D=data.frame("Col1" = c("Levice", "Nitra", "Brezno", "Detva", "Zvolen"),
"Col2" = 1:5, stringsAsFactors=F)
我想我可以用代码来做到这一点:
D$Col1[1:2]=paste(D$Col1[1:2],"NR", sep=".")
D$Col1[3:5]=paste(D$Col1[3:5],"BB", sep=".")
所以我明白了:
Col1 Col2
Levice.NR 1
Nitra.NR 2
Brezno.BB 3
Detva.BB 4
Zvolen.BB 5
但是,如果我尝试将代码放入函数中,结果不会存储在我的数据框中:
Suffix=function(X1){
D1=(X1=D$Col1[1:2])
paste(D$Col1[1:2],"NR", sep=".")
}
Suffix(D)
"Levice.NR" "Nitra.NR"
或者如果我修改它,不起作用:
Suffix=function(X1){
D1=(X1=D$Col1[1:2])
D$Col1[1:2]=paste(D$Col1[1:2],"NR", sep=".")
}
Suffix(D)
#just nothing happens to the data frame
你能帮忙看看函数有什么问题吗?
R 中的函数不应修改自身以外的值。事实上,函数不应该有 "side-effects" 是函数编程的核心原则(R 是一种函数编程语言)。当您尝试从函数范围外修改变量时,该函数会对只能在函数内部访问的副本进行更改。
正确的做法是return修改对象并在函数外进行重新赋值
Suffix <- function(X) {
X$Col1[1:2] <- paste(X$Col1[1:2],"NR", sep=".")
return(X)
}
D <- Suffix(D)