を参照して、1を書くことができます:私はと呼ばれる関数を書いたR言語の関数の引数は、線形モデル関数では、データファイル
result <- lm(r ~ N, data = ds)
関数は、変数rのためにデータフレームDSで見て知っていて、N
Check.Data。引数riとniはデータファイルdsの変数です。それがR見つけることができないので、
Check.Data(ri = ds$r, ni = ds$N, data = ds) #This runs
Check.Data(ri = r, ni = N, data = ds) #this does not
関数の2番目の呼び出しは実行されません:Check.Dataで エラー(RI = R、NI = N、データ= DS):オブジェクトは 'r' が見つかりません
riとniの引数がデータセット(例:ri = ds $ r、ni = ds $ N)を指定することなくdsの変数であることが分かるように、関数内ではどのようなコマンドが必要ですか?
あなたが機能を見たい場合は、ここにある:
Check.Data <- function(ri= ri, ni=ni, data = data)
{
#make sure values needed are non-missing
if (missing(data)) stop("Function CheckData is terminated because data set name is missing.")
if (missing(ri)) stop("Function CheckData is terminated because ri is missing.")
if (missing(ni)) stop("Function CheckData is terminated because ni is missing.")
#add ri and ni to the data frame named data
data$ri <- ri
data$ni <- ni
#make sure ri is numeric
if(is.numeric(data$ri) == FALSE) stop("Function CheckData is terminated because ri is not numeric.")
#make sure ni is numeric
if(is.numeric(data$ni) == FALSE) stop("Function CheckData is terminated because ni is not integer.")
#does ri have any missing data. if so issue message and stop
if(any(ind.na <- is.na(data$ri))) stop(paste("ri has", sum(ind.na), "missing values. CheckData is terminated."))
#does ni have any missing data. if so issue message and stop
if(any(ind.na <- is.na(data$ni))) stop(paste("ni has", sum(ind.na), "missing values. CheckData is terminated."))
}
「特定のコマンド」で列の値にアクセスするために使用することができます。あなたが記述しているテクニックは非標準評価と呼ばれています。[this](http://adv-r.had.co.nz/Computing-on-the-language.html)は良い紹介です。しかし、ri = "r"の代わりにri = rを指定できるという利点が、非標準評価を実装するのが難しく複雑になるかどうかを慎重に検討します。 – joran
Ew、関数内で '$'を使うことは絶対にお勧めしません。これは、コンソールレベルで使用するための便利な機能です。代わりに '[['を使用する方法を学んでください。 –