对象元素的粘贴函数返回NA

时间:2017-12-28 22:40:40

标签: r

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;如何让它返回存储在对象字段中的数字?

1 个答案:

答案 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
>