readStateData <- function() {
infile <- paste("state",i,".txt",sep="")
state <- readLines(infile,n=1)
statedata <- read.table(infile,header=FALSE,sep=",",skip=1,col.names=c("Rank","City","Population"))
statename <- list(state,statedata)
statename
}
# Start loop
for(i in 1:50) {
readStateData()
# Add function to big.list
big.list[[i]] <- readStateData(statename)
}
クラスの割り当ては、すべてstate#.txtという名前の50個のファイルを取り込み、readLinesを介して状態を取得し、read.tableを介してデータを取得し、最終的にすべてをbig.listに配置して、すべてのデータを取得することです。 forループ。
私が抱えている問題は、forループ中に関数を呼び出すことです。エラーが発生します:
Error in readStateData(statename) : unused argument (statename)
関数を正しく呼び出していないか、関数を間違って記述しています。両方とも可能性があります。
ご協力ありがとうございました。
ここにはさまざまな問題があります。
関数の内部で、外部で定義されている変数を参照しないでください。これは、関数のi
内部で定義された関数の外部にアクセスする代わりに、次のことを意味します。
i <- 1
fct <- function() {
a <- i + 1
return(a)
}
fct()
変数を引数として関数に渡します。
i <- 1
fct <- function(x) {
a <- x + 1
return(a)
}
fct(i)
関数にreturnステートメントがありません。関数の最後のコマンドであるポイント1を参照してください。returnステートメントがない場合、最後に書き込まれた変数はスタック上にあり、関数によって「返され」ます。これは、値を返すためのクリーンな方法ではありません。
エルゴコードは次のようになります
readStateData <- function(x) {
infile <- paste("state",x,".txt",sep="")
state <- readLines(infile,n=1)
statedata <-read.table(infile,header=FALSE,sep=",",skip=1,col.names=c("Rank","City","Population"))
statename <- list(state,statedata)
return(statename)
}
# Start loop
for(i in 1:50) {
j <- readStateData(i)
# Add function to big.list
big.list[[i]] <- j
}
ファイルがすべてパターン:state [number] .txtの場合、コードを次のように簡略化できます。
# Get all files with pattern state*.txt
fls <- dir(pattern='state.*txt')
readStateData <- function(x) {
state <- readLines(x, n=1)
statedata <-read.table(x, header=FALSE,sep=",",skip=1,col.names=c("Rank","City","Population"))
statename <- list(state,statedata)
return(statename)
}
# Start loop
for(i in 1:length(fls)) {
j <- readStateData(fls[i])
# Add function to big.list
big.list[[i]] <- j
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加