我注意到,使用T和F替代TRUE,并FALSE在R的功能和使我有同样的结果.当然,T并且F更简洁,但我看到TRUE并且FALSE更频繁地使用.
我想知道两者之间是否有任何区别?使用T和有什么问题F吗?
我想创建一个1:85的序列,但不包括seq(1,85,5)中的数字.像这样:
2 3 4 5 7 8 9 10 12 13 etc..
Run Code Online (Sandbox Code Playgroud)
在R中这样做的有效方法是什么?
非常感谢!
假设我的工作空间(全局环境)中有很多对象,我希望将大多数对象存储在列表中.这是一个简化的例子:
# Put some objects in the workspace
A <- 1
B <- 2
C <- 3
Run Code Online (Sandbox Code Playgroud)
我想将对象A和C存储在列表中.当然,我可以明确地做到这一点:
mylist <- list(A,C)
Run Code Online (Sandbox Code Playgroud)
但是,当工作空间中的对象数量非常大时,这将变得相当麻烦.因此,我想以不同的方式做到这一点并尝试以下方面:
mylist <- list(setdiff(ls(),B))
Run Code Online (Sandbox Code Playgroud)
但这显然不是我想要的,因为它只存储工作区中对象的名称.
有关如何做到这一点的任何建议?
非常感谢!
我想在data.frame中找到最常见的值组合.
这是一些示例数据:
dat <- data.frame(age=c(50,55,60,50,55),sex=c(1,1,1,0,1),bmi=c(20,25,30,20,25))
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我要找的结果是age = 55,sex = 1和bmi = 25的组合,因为这是列值的最常见组合.
我的真实数据有大约30000行和20列.在30000个观测值中找到这20个值的最常见组合的有效方法是什么?
非常感谢!
我有一个看起来像这样的矢量:
c(0.5,0,0,0,0,0.7,0,0,0,0,0.4,0,0,0,0)
Run Code Online (Sandbox Code Playgroud)
假设我想将位置1,6和11(非0的位置)的值复制到该特定值之后的四个位置,以使向量看起来像这样:
c(0.5,0.5,0.5,0.5,0.5,0.7,0.7,0.7,0.7,0.7,0.4,0.4,0.4,0.4,0.4)
Run Code Online (Sandbox Code Playgroud)
我怎么能在R中做到最好?
非常感谢!
我正在编写一个函数,我想将一些参数传递给crrstep-function('crrstep'包),但我遇到了一个问题:当我在crrstep中输入时,我的函数中的参数'event'无法识别.我想crrstep看起来与我想要的环境不同,但即使经过几个小时的网络搜索解决方案,我似乎也无法弄清楚如何解决这个问题(我在编程方面经验不足......) .任何帮助将不胜感激!
这是一些模拟数据(来自crrstep文档的调整示例)和我的代码示例:
n <- 500
ftime <- rexp(n)
fstatus <- sample(0:2,n,replace=TRUE)
testdata <- matrix(runif(8*n),nrow=n)
testdata <- cbind(ftime,fstatus,testdata)
dimnames(testdata)[[2]] <- c('ftime','fstatus','x1','x2','x3','x4','x5','x6','x7','x8')
testdata <- as.data.frame(testdata)
formula1 <- ftime ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
rm(fstatus,ftime,n)
test.fun <- function(x,data,event){
require(crrstep)
select.mod<- crrstep(formula=x,,etype=event, failcode=1, cencode=0,data=data,
direction = "backward", criterion = "AIC", crr.object = TRUE,
trace = FALSE)
#Rest of function omitted for now
print(select.mod)
}
#Test
test.fun(x=formula1,data=testdata,event=fstatus)
#I get: Error in …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的data.frame:
data <- data.frame(A=c(1,3,5),B=c(4,3,6),C=c(2,2,8),D=c(3,3,4))
A B C D
1 4 2 3
3 3 2 3
5 6 8 4
Run Code Online (Sandbox Code Playgroud)
现在我想创建新的变量"E",这是列A,B和C的最低值.所以data.frame现在看起来像这样:
A B C D E
1 4 2 3 1
3 3 2 3 2
5 6 8 4 5
Run Code Online (Sandbox Code Playgroud)
我可以使用for循环来做到这一点:
for (i in 1:nrow(data)) {
data$E[i] <- min(data[i,c("A","B","C")])
}
Run Code Online (Sandbox Code Playgroud)
但我想知道这是否可以做得更好(效率更高)?
非常感谢!
我有一个日期的矢量,格式如下:
dates <- c("01AUG2006","01DEC2006","01JUN2006","01MAY2007")
Run Code Online (Sandbox Code Playgroud)
要将此向量转换为类的对象Date,我编写了此函数:
convert2Date <- function(x) {
require(car)
d <- substr(x,0,2)
m.text <- substr(x,3,5)
m <- Recode(m.text, "'JAN'=1 ;'FEB'=2;'MAR'=3;'APR'=4;'MAY'=5;'JUN'=6;
'JUL'=7;'AUG'=8;'SEP'=9;'OCT'=10;'NOV'=11;'DEC'=12")
y <- substr(x,6,9)
out <- as.Date(paste(d,m,y,sep="/"),"%d/%m/%Y")
out
}
Run Code Online (Sandbox Code Playgroud)
使用示例dates变量:
test <- convert2Date(dates)
[1] "2006-08-01" "2006-12-01" "2006-06-01" "2007-05-01"
class(test)
[1] "Date"
Run Code Online (Sandbox Code Playgroud)
这可行,但它看起来有点麻烦,只适用于这种特定的格式.由于这可能是一个常见问题,因此必须有一种更简单,更通用的方法.有人建议吗?非常感谢!
我想写一个函数来打印一些输出,其间有空行.使用例如surv:::print.coxph,我看到这可以使用cat("\n").但是,当我在一个函数中尝试时,只有第一个cat("\n")给出一个空行作为输出,而第二个没有.这是一个例子:
prnt.test <- function(x){
cat("\n")
cat(x)
cat("\n")
cat(x)
}
prnt.test(x="test")
# Output:
test
test
Run Code Online (Sandbox Code Playgroud)
关于如何在两者中打印空白行的任何想法test?
(我在Windows下使用RStudio版本0.98.501,R版本3.0.2:平台:i386-w64-mingw32/i386(32位))
非常感谢!
我有一个数字看起来像这样的向量:c(52.2,76.3,16.1,85.8).我想确定seq(15,90,5)每个值中的哪个区间,并创建一个带有数字的新向量,指示特定的区间/类别.
以下功能有效,但看起来相当麻烦,所以希望有人可以帮助我提高效率/简洁性.
testfun <- function(x){
ifelse(x>=15 & x<20, 1, ifelse(x>=20 & x<25, 2, ifelse(x>=25 & x<30, 3,
ifelse(x>=30 & x<35, 4, ifelse(x>=35 & x<40, 5, ifelse(x>=40 & x<45, 6,
ifelse(x>=45 & x<50, 7, ifelse(x>=50 & x<55, 8, ifelse(x>=55 & x<60, 9,
ifelse(x>=60 & x<65, 10, ifelse(x>=65 & x<70, 11, ifelse(x>=70 & x<75, 12,
ifelse(x>=75 & x<80, 13, ifelse(x>=80 & x<85, 14, ifelse(x>=85 & x<90, 15,
ifelse(x>=85 & x<90, 16, NA))))))))))))))))}
> testfun(c(52.2,76.3,16.1,85.8))
[1] 8 13 1 …Run Code Online (Sandbox Code Playgroud) 我在R中创建了以下简单函数:
fun <- function(a,b,c,d,e){b+(c-a)*((e-b)/(d-a))}
Run Code Online (Sandbox Code Playgroud)
我想将此函数应用于data.frame类似于:
> data.frame("x1"=seq(55,75,5),"x2"=round(rnorm(5,50,10),0),"x3"=seq(30,10,-5))
x1 x2 x3
1 55 51 30
2 60 45 25
3 65 43 20
4 70 57 15
5 75 58 10
Run Code Online (Sandbox Code Playgroud)
我想应用于fun每个单独的行来创建一个新变量x4,但现在是困难的部分(对我来说至少......):对于参数d和e我想使用值x2和x3下一行.因此对于示例的第一行意味着:fun(a=55,b=51,c=30,d=45,e=25).我知道我可以用来mapply()为每一行应用一个函数,但我不知道如何告诉mapply它应该使用下一行的一些值,或者我是否应该寻找一种不同的方法mapply()?
提前谢谢了!