将计算值分配给函数 R 中的对象
Assign a calculated value to an object in a function R
我正在尝试 return 一个对象,其所有特征的值都为 'alt_props',并使用一个函数。 (alt_props x b)至少应该是30,所以当计算出的(alt_props x b)小于30时,那个alt_props的值应该改为alt_props的值30/桶。 (1:7) 是代表不同特征的列。
calc_props <- function(x, pvals, betas){
s <- colSums(pvals < 5e-8, na.rm = TRUE) #significant SNPs
t <- colSums(!is.na(pvals)) #all SNPs
b <- colSums(!is.na(betas)) #Number of betas
alt_props <- s/t #alt_prop calculation
a[x] <- 30/b #value to assign if alt_props*b < 30
alt_props[(alt_props*b) < 30] <- a[x] #check to ensure that "alt_prop*b" is atleast 30
alt_props
}
alt_props <- calc_props(1:7, pvals, betas) #the columns are the traits (7)
但是,当 运行 这段代码时,我得到错误 Error in a[x] <- 30/b : object 'a' not found
。我怎样才能分配正确的a?
我的数据是这样的:
dput(pvals[1:10])
c(0.14, 0.87, 3.7e-23, 1.2e-07, 0.84, 0.72, 0.34, 0.13, 0.019,
8e-05)
> dput(betas[1:10])
c(-0.0021, 2e-04, -0.0141, -0.0082, -7e-04, 8e-04, 0.0021, -0.0034,
-0.0039, 0.0179)
第二次尝试回答这个问题。从colSums
、s
、t
、b
的使用来看,应该都是等长的向量,你计算出比例存入向量alt_props
。现在,如果条件 (alt_props * b) < 30
,您想输入值 30/b
。我们可以尝试使用值和条件向量来做到这一点。查看新功能。我看不到原始函数中对 x
的需求,因为它似乎只用于以某种方式对 a
进行子集化。
calc_props <- function(x, pvals, betas){
s <- colSums(pvals < 5e-8, na.rm = TRUE)
t <- colSums(!is.na(pvals)) #all SNPs
b <- colSums(!is.na(betas)) #Number of betas
alt_props <- s/t #alt_prop calculation
# Create the subsetting values and condition
condition_val <- 30/b
condition <- (alt_props*b) < 30
# Subset both the alt_props and condition values with the same vector
alt_props[condition] <- condition_val[condition]
alt_props
}
我正在尝试 return 一个对象,其所有特征的值都为 'alt_props',并使用一个函数。 (alt_props x b)至少应该是30,所以当计算出的(alt_props x b)小于30时,那个alt_props的值应该改为alt_props的值30/桶。 (1:7) 是代表不同特征的列。
calc_props <- function(x, pvals, betas){
s <- colSums(pvals < 5e-8, na.rm = TRUE) #significant SNPs
t <- colSums(!is.na(pvals)) #all SNPs
b <- colSums(!is.na(betas)) #Number of betas
alt_props <- s/t #alt_prop calculation
a[x] <- 30/b #value to assign if alt_props*b < 30
alt_props[(alt_props*b) < 30] <- a[x] #check to ensure that "alt_prop*b" is atleast 30
alt_props
}
alt_props <- calc_props(1:7, pvals, betas) #the columns are the traits (7)
但是,当 运行 这段代码时,我得到错误 Error in a[x] <- 30/b : object 'a' not found
。我怎样才能分配正确的a?
我的数据是这样的:
dput(pvals[1:10])
c(0.14, 0.87, 3.7e-23, 1.2e-07, 0.84, 0.72, 0.34, 0.13, 0.019,
8e-05)
> dput(betas[1:10])
c(-0.0021, 2e-04, -0.0141, -0.0082, -7e-04, 8e-04, 0.0021, -0.0034,
-0.0039, 0.0179)
第二次尝试回答这个问题。从colSums
、s
、t
、b
的使用来看,应该都是等长的向量,你计算出比例存入向量alt_props
。现在,如果条件 (alt_props * b) < 30
,您想输入值 30/b
。我们可以尝试使用值和条件向量来做到这一点。查看新功能。我看不到原始函数中对 x
的需求,因为它似乎只用于以某种方式对 a
进行子集化。
calc_props <- function(x, pvals, betas){
s <- colSums(pvals < 5e-8, na.rm = TRUE)
t <- colSums(!is.na(pvals)) #all SNPs
b <- colSums(!is.na(betas)) #Number of betas
alt_props <- s/t #alt_prop calculation
# Create the subsetting values and condition
condition_val <- 30/b
condition <- (alt_props*b) < 30
# Subset both the alt_props and condition values with the same vector
alt_props[condition] <- condition_val[condition]
alt_props
}