-3

这是这里帖子的后续

这是@Arun 提供的代码:此代码在不同目录的文件上运行以比较不同的数据帧。

f1 <- list.files("<path1>", full.names = TRUE) 
f2 <- list.files("<path2>", full.names = TRUE) 
f3 <- list.files("<path3>", full.names = TRUE)


get_idx <- function(in_df) { 
sapply( 1:nrow(in_df), function(idx) 
which(df1[idx, 2:4] > df1[idx, 1])) 
}

get_result <- function(idx.v, in_df2, in_df3) { 
sapply(1:length(idx.v), function(ix) { 
col.idx <- idx.v[[ix]] 
len.idx <- length(col.idx) 
if (len.idx > 0) { 
res <- sum(in_df2[ix, col.idx] - in_df3[ix, col.idx]) 
} else { 
res <- NA 
} 
}) 
}

那么最后一部分是:

out <- lapply(1:length(f1), function(f.idx) { 
df1 <- read.table(f1[f.idx], header = T) 
df2 <- read.table(f2[f.idx], header = T) 
df3 <- read.table(f3[f.idx], header = T) 

idx.v <- get_idx(df1) 
result <- get_result(idx.v, df2, df3) 
transform(df3, result = result) 
})

运行此代码会产生错误消息:

Error in which(df1[idx, 2:4] > df1[idx, 1]) : object 'df1' not found 
4

1 回答 1

3

这是一个非常简单的错误。将行更改which(df1[idx, 2:4] > df1[idx, 1]))which(in_df[idx, 2:4] > in_df[idx, 1]))

于 2013-01-03T21:22:10.197 回答