我在通过使用SAS多年后开始学习R,很快发现R中的函数与SAS中的宏不同,因此需要一些指导。
以下是我编写的无法运行的函数:
dscore<-function(data,var){
ave<-mean(data$var)
sd<-sd(data$var)
data$vardscore<-(data$var-ave)/sd
return(data)
}
我正在使用汽车数据集
cars<-dscore(cars,speed)
应该返回一个带有额外列的汽车数据框,该列是该观察值速度变量的Cohen D值。
我遇到了各种各样的错误,所以我会感激任何帮助。
编辑:
dbind<-function(data,var){
var<-substitute(var)
var<-as.character(var)
ave<-mean(data[,var])
sd<-sd(data[,var])
name<-paste0(var,"dscore")
data$name=((data[,var]-ave)/sd)
return(data)
}
我需要帮助根据输入动态命名新列。目前只能得到一个名为“name”的新列。
data$var
被翻译为cars$speed
是有意义的。另一方面,R则不同,它会传递一个表示为data
的cars
副本,但实际上会查找data$var
- 而这个变量在从cars
复制的数据集中当然不存在。 - thelatemail"$"
通常不是个好主意,如果你学会使用"[",那么你会更加愉快) - IRTFMdscore <- function(x) (x-mean(x))/sd(x)
,然后执行cars$vardscore <- dscore(cars$speed)
或cars["vardscore"] <- dscore(cars[,"speed"])
。 - thelatemaildscore
函数,然后可以执行:cars[paste(names(cars),"dscore",sep=".")] <- lapply(cars, dscore)
这样一切问题都解决了。 - thelatemaildscore
替换为scale
,你也可以开始工作了。 - thelatemail