假设我有一个由10名球员(球员)组成的足球队,我应该从中制作两个子团队,每队5人,然后计算每个团队的总分.
players <- read.table(text=
"paul 3
ringo 3
george 5
john 5
mick 1
ron 2
charlie 3
ozzy 5
keith 3
brian 3", as.is=TRUE)
Run Code Online (Sandbox Code Playgroud)
我已经提取了一组随机的5名玩家:
t1 <- sample(players$V1, size = 5)
Run Code Online (Sandbox Code Playgroud)
但是要创建第二支球队(不包括第一支球员)并计算两支球队的总得分,我已完成封锁.
给定一行,一列或一个单元格的矩阵,我需要在保持矩阵结构的同时重新排序行.我尝试添加,drop=F但它不起作用!我做了什么?
test = matrix(letters[1:5]) # is a matrix
test[5:1,,drop=F] # not a matrix
test2 = matrix(letters[1:5],nrow=1) # is a matrix
test2[1:1,,drop=F] # not a matrix
test3 = matrix(1) # is a matrix
test3[1:1,,drop=F] # not a matrix
Run Code Online (Sandbox Code Playgroud) 我需要将数字向量转换为字符串,例如,
c(1,0,3,4,5)
Run Code Online (Sandbox Code Playgroud)
成
"10345"
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,当控制台继续滚动时,它们不会丢失).一种方法是使用sink()和file.show().例如:
y <- rnorm(100); x <- rnorm(100); mod <- lm(y~x)
sink("tempSink", type="output")
summary(mod)
sink()
file.show("tempSink", delete.file=T, title="Model summary")
Run Code Online (Sandbox Code Playgroud)
我经常这样做是为了检验模型拟合,如上述,也为各种各样的其他功能和对象,如:summary(data.frame),anova(model1, model2),table(factor1, factor2).这些很常见,但也可能出现其他情况.这里的要点是函数和对象的性质都可以变化.
每次输入以上所有内容有点乏味.我想写一个我可以调用的更简单的函数,类似下面的东西会很好:
sinkShow <- function(obj, fun, title="output") {
sink("tempSink", type="output")
apply(obj, ?, fun)
sink()
file.show("tempSink", delete.file=T, title=title)
}
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用.有几个问题.首先,你将如何做到这一点,以便它不会与错误类型的对象或函数崩溃,而不必有一个条件执行列表(即,if(is.list(obj) { lapply...).其次,我不确定如何处理这个margin论点.最后,即使我尝试简单,人为的例子,我知道一切都设置得恰到好处,所以这似乎有些根本错误.
有谁知道如何简单轻松地处理这种情况?我不是R的新手,但我从来没有正式教过它; 我以特别的方式选择了技巧,即我不是一个非常复杂的R程序员.谢谢.