data<-read.csv("advanced_r_programming/data/MIE.csv")
LongitudinalData<-function(n_sub){
structure(n_sub, class = "LongitudinalData" )
}
make_LD<-function(x){
LongitudinalData(sum(as.logical(unique(x$id))))
}
print.LongitudinalData<-function(x){
paste("Longitudinal dataset with", x[n_sub], "subjects")
}
x<-make_LD(data)
print(x)
因此,这将返回&#34;具有NA科目的纵向数据集&#34;如何让它返回存储在对象字段中的数字?
答案 0 :(得分:0)
在S3对象系统中,使用list()
函数作为structure()
的参数构造对象。如果进行以下更改,您的代码将按预期工作。
LongitudinalData<-function(n_sub){
structure(list(n_sub = n_sub), class = "LongitudinalData" )
}
make_LD<-function(x){
LongitudinalData(sum(as.logical(unique(x$id))))
}
print.LongitudinalData<-function(x){
paste("Longitudinal dataset with", x["n_sub"], "subjects")
}
data<-read.csv("./data/MIE.csv",header=TRUE,stringsAsFactors=FALSE,nrows=100)
x<-make_LD(data)
print(x)
...和输出,当我们读取MIE.csv文件的前100行时:
> data<-read.csv("./data/MIE.csv",header=TRUE,stringsAsFactors=FALSE,nrows=100)
> x<-make_LD(data)
> print(x)
[1] "Longitudinal dataset with 1 subjects"
>
当我们读取整个MIE.csv
文件并使用SQL查询进行交叉检查时会发生什么。
> data<-read.csv("./data/MIE.csv",header=TRUE,stringsAsFactors=FALSE)
> x<-make_LD(data)
> print(x)
[1] "Longitudinal dataset with 10 subjects"
>
> # verify with an SQL query
>
> library(sqldf)
> sqldf('select count(distinct id) from data')
count(distinct id)
1 10
>