我试图不使用for循环将值分配给列表的元素.
在这里,我创建一个空列表,给它一个20的长度并命名20个元素中的每一个.
mylist <- list()
length(mylist) <- 20
names(mylist) <- paste0("element", 1:20, sep = "")
Run Code Online (Sandbox Code Playgroud)
我希望每个元素都mylist包含从随机生成的数字池中提取的样本,表示为x:
x <- runif(100, 0, 1)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但没有达到预期的结果:
mylist[[]] <- sample(x = x, size = 20, replace = TRUE) # Gives an error
mylist[[1:length(mylist)]] <- sample(x = x, size = 20, replace = TRUE) # Does not give the desired result
mylist[1:length(mylist)] <- sample(x = x, size = 20, replace = TRUE) # Gives the same undesired result as the …Run Code Online (Sandbox Code Playgroud) 我得出结论,R专家不太喜欢循环; 但是,作为一名前java程序员,这个事实对我来说有点苛刻.
我要动态地创建5个变量:x1,x2,x3,x4和x5并指定他们中的每一个随机值.
> i = 1
>
> while(i <= 5)
{
assign(paste("x", i, sep = ""), rnorm(1))
i = i + 1
}
> x1
[1] 0.3853609
> x2
[1] 1.626055
> x3
[1] -1.043699
> x4
[1] 0.3449921
> x5
[1] -0.9768416
Run Code Online (Sandbox Code Playgroud)
好吧,这使用while循环,我正在寻找R方式这样做.我试过了:
assign(paste("x", 1:5, sep=""), rnorm(1)
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误.我究竟做错了什么?
我有以下列表:
peter <- data.frame(year = 1:5, a = rnorm(5), b = rnorm(5))
john <- data.frame(year = 1:5, a = rnorm(5), b = rnorm(5))
myList <- list(peter, john)
names(myList) <- c("peter", "john")
myList
$peter
year a b
1 1.01464245 0.2490931
2 1.38054309 0.8396630
3 -0.84094830 0.2410526
4 -0.05567379 0.6369121
5 -0.66412862 1.5739672
$john
year a b
1 0.3060996 -0.4256702
2 0.7167710 -0.6828029
3 -0.6896138 0.6577422
4 -1.7647412 -0.5651756
5 0.3065734 -0.4860141
Run Code Online (Sandbox Code Playgroud)
如何转换myList为以下数据框:
year student a b
1 1 peter …Run Code Online (Sandbox Code Playgroud) 当该cbind函数用于组合 2 个或更多矩阵时,生成的矩阵将继承列名称。下面是一个简单的例子来说明这一事实。我有两个 (2x2) 矩阵m1和m2. 的列m1是a和b;的列m2是c和d。如果 Icbind m1和m2,我将获得一个包含 4 列的矩阵,名称为:a、b和。cd
> m1 <- matrix(1:10, ncol = 2)
> colnames(m1) <- letters[1:2]
> m2 <- matrix(11:20, ncol = 2)
> colnames(m2) <- letters[3:4]
>
> M <- cbind(m1, m2)
> M
a b c d
[1,] 1 6 11 16
[2,] 2 7 …Run Code Online (Sandbox Code Playgroud) 我最近发现,在用"["对一个对象(即一个数据帧)进行子集化之后,生成的对象可能是在同一行代码上带有"["的子集(我应该早点实现它!).这是一个例子:
# Create a data frame
df1 <- as.data.frame(matrix(1:9, nrow = 3))
# Take a look at the data frame
df1
V1 V2 V3
1 1 4 7
2 2 5 8
3 3 6 9
# If I want the value which is on the 3rd row and 2nd column
df1[3,2]
[1] 6
# But I could also
df1[,2][3]
[1] 6
Run Code Online (Sandbox Code Playgroud)
关于第二种选择的几句话.df[,2]返回一个原子向量,然后是子集df[,2][3].
以下数据框架将有助于说明我的问题.它是一个简单的数据框,包含26名学生的姓名,他们各自的部门以及数值.添加种子数以获得再现性.
set.seed(123)
df2 <- data.frame(name = letters, dept = sample(c("econ", "stat", "math"), 26, …Run Code Online (Sandbox Code Playgroud) 我有一个包含3个向量的列表.
mylist <- list( a = c(1,2),
b = c(3,4),
c = c(5,6) )
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法,例如,使用sum()函数对三个对象的第一个值执行计算?
我尝试过很多东西:
sum(mylist[c(a, b, c)][1])
Run Code Online (Sandbox Code Playgroud)
这行代码不起作用,但它可以让我深入了解我想要做的事情.
谢谢你的帮助.
编辑:该bs4Dash软件包的作者 David Granjon 最近对下面引用的 Github 问题中提出的问题提供了答案,并将其关闭。
bs4Dash有关,但那里没有提供答案。我正在制作一个模块化的 Shiny 应用程序,并尝试使用该bs4Dash包来完成它。该应用程序如下所示:
图片1
最终应用程序有几个部分(我只为本示例做了介绍),每个部分至少包含一个bs4TabCard. 上图中的标签卡有一个uiOutput和一个rhandsontableOutput元素,这些元素是在服务器函数中渲染的。请注意,这些都是***Output元素。在图 1的可重现代码中(您可以在问题末尾找到),我不使用任何模块。然而,我的目标是使用多个模块,因为应用程序有可能变得相当大。对于这个简单的示例,我尝试使用两个模块:每个部分(即每个bs4TabItem)一个模块,每个标签卡一个模块。这意味着这两个模块将始终嵌套:tabcard 模块将位于节模块内部。
图2
问题是,当我实现模块时,***Output元素不会显示:
图3
令人惊讶的是***Input元素被显示了。我制作了第三个模块,其中numericInput仅包含一个并将其放置在标签卡的第二个选项卡中。如下图所示,显示numericInput没有问题:
图4
在这个问题中,报告了类似的问题,但没有提供任何解决方案,并且我的挖掘证明不成功。当输出元素被放置在bs4Dash.
图1的可重现代码
library(shiny)
library(bs4Dash)
library(rhandsontable)
shiny::shinyApp(
ui = bs4DashPage(
old_school = FALSE,
sidebar_min = TRUE,
sidebar_collapsed = FALSE,
controlbar_collapsed = FALSE,
controlbar_overlay …Run Code Online (Sandbox Code Playgroud) 我刚刚发现了R而我正在尝试使用它.
这是我想要实现的目标:
我有一个数字向量x,介于50和100之间,大小为250个观测值.
x = sample(seq(50, 100), 250, repeat = T)
Run Code Online (Sandbox Code Playgroud)
现在,我想生成另一个数字矢量y,介于0和100之间,这与矢量x的大小相同,因此y中的每个元素都小于或等于x中的等价物.
也就是说,如果x [1]是76,例如,生成的最高值y [1]可以达到76.但它绝对可以是低于76的任何其他值.换句话说,更一般地说,我想要矢量y以y [i] <= x [i]的方式生成.
我希望我的要求更清楚.
非常感谢你!