[英]R input names from a character vector to a function formula statement
我深知有下文所述的具體問題更好的解決方案(例如, cor
和rcorr
在Hmisc
,為討論在這里 )。 這只是一個我無法弄清楚的更一般R問題的例證:將多個變量名從字符向量傳遞到函數中的公式語句。
假設有一個由數字變量組成的數據集。
vect.a <- rnorm(n = 20, mean = 0, sd = 1)
vect.b <- rnorm(n = 20, mean = 0, sd = 1)
vect.c <- rnorm(n = 20, mean = 0, sd = 1)
vect.d <- rnorm(n = 20, mean = 0, sd = 1)
dataset <- data.frame(vect.a, vect.b, vect.c, vect.d)
names(dataset) <- c("var1", "var2", "var3", "var4")
必須使用函數cor.test
~ VarA + VarB
類型的公式語句,對該數據集中的每個可能的變量對執行關聯測試:
for (i in 1:(length(names(dataset))-1)){
for (j in (i+1):length(names(dataset))) {
cor.test(~ names(dataset)[i] + names(dataset)[j], data = "dataset")
}
}
返回錯誤:類型為'character'的'envir'參數無效
我假設一個字符串與該公式語句不兼容,但是哪個類與它兼容? 如果整個方法都不對,請解釋原因並提供或指出替代解決方案。 如果方法是“丑陋”或“非R” ,請解釋原因。
您可以通過將as.formula
與字符串參數一起使用來獲得該公式。
>> x <- c('x1','x2','x3')
>> f <- as.formula(paste('~ ', x[1], ' + ', x[2]))
>> f
~x1 + x2
>> class(f)
[1] "formula"
這里還有另一個問題,因為dataset
是一個名稱,所以data="dataset"
應該是data=dataset
。
> dataset <- data.frame(a=1:5, b=sample(1:5))
> cor.test(~ a + b, data="dataset")
Error in eval(predvars, data, env) :
invalid 'envir' argument of type 'character'
> cor.test(~ a + b, data=dataset)
Pearson's product-moment correlation
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.