2017-12-28 12 views
0
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) 

これは「NA被験者を含む縦のデータセット」を返します。オブジェクトのフィールドに格納されている数値を返すにはどうすればよいですか?オブジェクトの要素の貼り付け関数が返されます。NA

+2

ようこそ。 [最小限の、完全で検証可能な例を作成する方法](https://stackoverflow.com/help/mcve)を読んで投稿を更新してください。具体的には、 'dput()'を使って問題のクラスのテキスト版を生成し、それをあなたの質問の一部として投稿すると役に立ちます。 –

+1

より具体的には、最小限でも、 'dput(foo)'の出力が必要です。ここで、 'foo'はこの関数を呼び出すためのものです。 – joran

+0

ああ、ありがとう。私は適切な変更を加えました。 – lamentaciones

答えて

0

S3オブジェクトシステムでは、structure()の引数としてlist()関数を使用してオブジェクトが構築されます。次の変更を加えると、コードは期待どおりに機能します。

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 
> 
関連する問題