我在R中编写了以下代码: 用户选择包含2列(V1和V2)的文件,包含大量行(行数因输入文件而异) 该脚本计算2个变量之间关系的rsq。根据输入文件,可以有10到1000行数据。
我想编写以下代码: 代码应遍历所有行,一次删除/省略/忽略一行,并在缺少此行的情况下计算新的rsq。所以,例如:
共有10行数据,总rsq = 0.97 步骤1:从等式中移除第一行数据 再次计算rsq,但这次是9行,给出rsq = 0.98 步骤2:重新添加第1行,删除第2行 rsq再次计算 第3步:重新添加第二行,删除第三行 rsq再次计算
每次循环后,新的rsq"将被放置在已删除行旁边的新列中。
任何人都可以建议如何做到这一点?我有这个编码在excel,它运作良好,但很麻烦,因此不理想。
答案 0 :(得分:1)
你想做这样的事吗?
# Make some sample data
set.seed(1095)
data <- data.frame( V1 = 1:10 , V2 = sample.int(5 ,10 ,repl = TRUE ) )
# Use sapply to get r2 removing each row at a time
r2 <- sapply( 1:nrow(data) , function(x) ( cor( data[-x,1] , data[-x,2] ) )^2 )
# Combine into a data frame
newdata <- cbind( data , r2 )
newdata
# V1 V2 r2
# 1 1 5 0.2526316
# 2 2 3 0.4657601
# 3 3 5 0.3204721
# 4 4 5 0.3691612
# 5 5 1 0.5405405
# 6 6 3 0.3769480
# 7 7 3 0.3840426
# 8 8 2 0.3409425
# 9 9 1 0.2725806
# 10 10 3 0.4986702